if(!window.ol) {
	window.ol = {
		debug: true,
		isIE:
			/*@cc_on!@*/
			0,
		isIE6: false,
		isIE7: false,
		isIE8: false,
		domCompleted: false
	}
}
ol.pkg = function(i, h, g) {
	var d, e, b;
	if(arguments.length == 3) {
		d = i;
		e = h;
		b = g
	} else {
		d = window;
		e = i;
		b = h
	}
	if(!e || !e.length) {
		return null
	}
	var l = e.split(".");
	for(var k = d, j = 0; j < l.length - 1; j++) {
		k[l[j]] || (k[l[j]] = {});
		k = k[l[j]]
	}
	k = (k[l[l.length - 1]] = b || k[l[l.length - 1]] || {});
	return k
};
(function() {
	var c = 0,
		e = [],
		d = function() {
			for(var f = 0; f < e.length; f++) {
				e[f].call(document)
			}
			e.length = 0
		},
		a = function() {
			if(ol.domCompleted) {
				d();
				return
			}
			if(!document.body) {
				setTimeout(arguments.callee, 13);
				return
			}
			ol.domCompleted = true;
			d()
		},
		b = {
			DOMContentLoaded: function() {
				if(document.addEventListener) {
					document.removeEventListener("DOMContentLoaded", b.DOMContentLoaded, false);
					a()
				} else {
					if(document.attachEvent) {
						if(document.readyState === "complete") {
							document.detachEvent("onreadystatechange", b.DOMContentLoaded);
							a()
						}
					}
				}
			},
			bindReady: function() {
				var f = b.DOMContentLoaded;
				if(document.readyState === "complete") {
					a();
					return
				}
				if(document.addEventListener) {
					document.addEventListener("DOMContentLoaded", f, false);
					window.addEventListener("load", a, false)
				} else {
					if(document.attachEvent) {
						document.attachEvent("onreadystatechange", f);
						window.attachEvent("onload", a);
						var g = false;
						try {
							g = window.frameElement == null
						} catch(h) {}
						if(document.documentElement.doScroll && g) {
							b.doScrollCheck()
						}
					}
				}
			},
			doScrollCheck: function() {
				if(ol.domCompleted) {
					return
				}
				try {
					document.documentElement.doScroll("left")
				} catch(f) {
					setTimeout(b.doScrollCheck, 1);
					return
				}
				a()
			}
		};
	ol.ready = function(f) {
		if(typeof(f) != "function") {
			return
		}
		if(ol.domCompleted) {
			f.call(document);
			return
		} else {
			if(e.length == 0) {
				b.bindReady()
			}
		}
		e.push(f)
	}
})();
(function() {
	var h = document.head || document.getElementsByTagName("head")[0] || document.documentElement,
		a = 0,
		e = {},
		b = {},
		g = function(j, k) {
			j.onload = j.onerror = j.onreadystatechange = function() {
				if(/loaded|complete|undefined/.test(j.readyState)) {
					j.onload = j.onerror = j.onreadystatechange = null;
					if(j.parentNode) {
						try {
							if(j.clearAttributes) {
								j.clearAttributes()
							} else {
								for(var m in j) {
									delete j[m]
								}
							}
						} catch(l) {}
						h.removeChild(j)
					}
					j = undefined;
					k()
				}
			}
		},
		f = function(l, o) {
			var j = [];
			var n = "jsapi_loader" + (a++);
			j.push("(function(){var time = 0,el = document.getElementById('" + n + "');if(!el || (el.readyState && 'complete' != el.readyState)){ if(time<10){ setTimeout(arguments.callee,30); time++; }else{ logger.error('load the script of id " + n + " fail!');} return; }");
			if(l.onload) {
				j.push("(");
				j.push(l.onload);
				j.push(")();")
			}
			if("object" == typeof(o)) {
				for(var k = 0; k < o.length; k++) {
					if("function" == typeof(o[k])) {
						j.push("(");
						j.push(o[k]);
						j.push(")();")
					} else {
						if("string" == typeof(o[k])) {
							j.push(o[k])
						}
					}
				}
			}
			var m = "";
			if(l.charset) {
				m = 'charset="' + l.charset + '"'
			}
			j.push("})();");
			document.write('<script id="' + n + '" loadType="insert" type="text/javascript" src="' + l.url + '" ' + m + "><\/script>");
			document.write("<script>" + j.join("") + "<\/script>")
		},
		d = function(j, m) {
			var l = document.createElement("script");
			l.src = j.url;
			l.async = !j.depend;
			l.type = "text/javascript";
			if(j.charset) {
				l.charset = j.charset
			}
			var k = l;
			h.insertBefore(l, h.firstChild);
			k = null;
			g(l, m)
		},
		i = function(j) {
			var k = document.createElement("link");
			k.rel = "stylesheet";
			k.type = "text/css";
			k.href = j.url;
			h.appendChild(k)
		},
		c = function(l, k) {
			var j = this;
			this._insertMark = {};
			this._css_queue = [];
			this._js_queue = [];
			this._wait_map = {};
			this._push = function(m) {
				if(!m.mark) {
					m.mark = (m.uri || m.url)
				}
				if(this._insertMark[m.mark]) {
					return
				}
				this._insertMark[m.mark] = true;
				("js" == m.type ? this._js_queue : this._css_queue).push(m)
			};
			this._attach = function(o) {
				if("string" == typeof(o)) {
					var m = o;
					o = e[m];
					if(!o) {
						if(ol.debug) {
							logger.warn("ol.load", m + " is undefined!")
						}
						return
					}
					this._attach(o);
					return
				} else {
					if("[object Array]" == Object.prototype.toString.apply(o)) {
						for(var n = 0; n < o.length; n++) {
							this._attach(o[n])
						}
						return
					}
				}
				this._push(o)
			};
			this._load = function(p) {
				(p.type == "js" ? this._js_queue : this._css_queue).splice(0, 1);
				var o = this._js_queue.length > 0 && this._js_queue[0].depend;
				var n = b[p.mark];
				if(n) {
					switch(n.status) {
						case "complete":
							if(p.onload) {
								setTimeout(p.onload, 50)
							}
							if(!o) {
								setTimeout(j.success, 50)
							}
							return true;
						case "active":
							if(!ol.domCompleted) {
								return true
							}
							var r = 1;
							var q = function() {
								var m = p;
								if(b[m.mark].status == "complete") {
									delete j._wait_map[m.mark];
									if(m.onload) {
										m.onload.call(document)
									}
									if(!o) {
										j.success();
										return
									}
									ol.load(j._js_queue, k);
									return
								}
								r++;
								if(r <= 20) {
									setTimeout(q, 50)
								}
							};
							setTimeout(q, 50);
							this._wait_map[p.mark] = true;
							return !o
					}
				}
				if(ol.domCompleted) {
					p.loadType = null
				}
				if(p.loadType == "lazy") {
					ol.ready(function() {
						j._load(p)
					});
					return true
				}
				if(!p.url) {
					if(p.uri.substr(0, 7) == "http://" || p.uri.substr(0, 8) == "https://") {
						p.url = p.uri
					} else {
						p.url = ol.libPath + p.uri
					}
				}
				if(p.type == "js") {
					b[p.mark] = {
						status: "active"
					};
					if(!ol.domCompleted) {
						var s = [];
						s.push('ol._setLoadStatus("' + p.mark + '","complete");');
						if(!o) {
							s.push(k.callback)
						}
						f(p, s)
					} else {
						var s = function() {
							b[p.mark] = {
								status: "complete"
							};
							if(p.onload) {
								p.onload.call(document)
							}
							if(o) {
								ol.load(j._js_queue, k)
							} else {
								j.success()
							}
						};
						d(p, s);
						return !o
					}
				} else {
					i(p)
				}
				return true
			};
			this.success = function() {
				if(j._js_queue.length > 0) {
					return
				}
				for(var m in j._wait_map) {
					return
				}
				if(k.onload) {
					k.onload.call(document)
				}
				if(k.callback) {
					ol.ready(k.callback)
				}
			};
			this.init = function() {
				if("[object object]" == Object.prototype.toString.apply(l)) {
					this._load(l);
					return
				} else {
					this._attach(l);
					this._insertMark = undefined;
					while(this._css_queue.length > 0) {
						this._load(this._css_queue[0])
					}
					while(this._js_queue.length > 0 && this._load(this._js_queue[0])) {}
				}
			};
			this.init()
		};
	ol.load = function(k, j) {
		if("function" == typeof(j)) {
			j = {
				callback: j
			}
		} else {
			if(!j) {
				j = {}
			}
		}
		if(!ol.domCompleted && j.loadType == "lazy") {
			ol.ready(function() {
				new c(k, j)
			})
		} else {
			new c(k, j)
		}
	};
	ol.load.define = function(j, k) {
		e[j] = k
	};
	ol.load.remove = function(j) {
		delete e[j]
	};
	ol._setLoadStatus = function(k, j) {
		b[k] = {
			status: j
		}
	}
})();
var logger = {
	info: function(b, a) {
		if(!ol.debug) {
			return
		}
		if(typeof(console) != "undefined" && console.log) {
			if(a) {
				console.log("[" + b + "]:" + a)
			} else {
				console.log(b)
			}
		}
	},
	warn: function(b, a) {
		if(!ol.debug) {
			return
		}
		if(typeof(console) != "undefined" && console.warn) {
			if(a) {
				console.warn("[" + b + "]:" + a)
			} else {
				console.warn(b)
			}
		}
	},
	error: function(b, a) {
		if(!ol.debug) {
			return
		}
		if(typeof(console) != "undefined" && console.error) {
			if(a) {
				console.error("[" + b + "]:" + a)
			} else {
				console.error(b)
			}
		}
	}
};

function log(b, a) {
	logger.info(b, a)
}(function() {
	var a = document.getElementsByTagName("script"),
		b = a[a.length - 1];
	var f = b.src.lastIndexOf("/");
	if(f > 0) {
		ol.libPath = scriptPath + "/common/"
	}
	var c = b.getAttribute("namespace");
	if(c) {
		window[c] = ol
	}
	b = null;
	try {
		document.write("<!--[if lte IE 6]><script>ol.isIE6=true;<\/script><![endif]--><!--[if IE 7]><script>ol.isIE7=true;<\/script><![endif]--><!--[if IE 8]><script>ol.isIE8=true;<\/script><![endif]-->")
	} catch(d) {}
})();
ol.ready(function() {
	ol.domCompleted = true;
	logger.info("Dom", "Load Complete!")
}); /*! jQuery v3.5.0 | (c) JS Foundation and other contributors | jquery.org/license */
! function(e, t) {
	"use strict";
	"object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
		if(!e.document) throw new Error("jQuery requires a window with a document");
		return t(e)
	} : t(e)
}("undefined" != typeof window ? window : this, function(C, e) {
	"use strict";
	var t = [],
		r = Object.getPrototypeOf,
		s = t.slice,
		g = t.flat ? function(e) {
			return t.flat.call(e)
		} : function(e) {
			return t.concat.apply([], e)
		},
		u = t.push,
		i = t.indexOf,
		n = {},
		o = n.toString,
		v = n.hasOwnProperty,
		a = v.toString,
		l = a.call(Object),
		y = {},
		m = function(e) {
			return "function" == typeof e && "number" != typeof e.nodeType
		},
		x = function(e) {
			return null != e && e === e.window
		},
		E = C.document,
		c = {
			type: !0,
			src: !0,
			nonce: !0,
			noModule: !0
		};

	function b(e, t, n) {
		var r, i, o = (n = n || E).createElement("script");
		if(o.text = e, t)
			for(r in c)(i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i);
		n.head.appendChild(o).parentNode.removeChild(o)
	}

	function w(e) {
		return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e
	}
	var f = "3.5.0",
		S = function(e, t) {
			return new S.fn.init(e, t)
		};

	function p(e) {
		var t = !!e && "length" in e && e.length,
			n = w(e);
		return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e)
	}
	S.fn = S.prototype = {
		jquery: f,
		constructor: S,
		length: 0,
		toArray: function() {
			return s.call(this)
		},
		get: function(e) {
			return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e]
		},
		pushStack: function(e) {
			var t = S.merge(this.constructor(), e);
			return t.prevObject = this, t
		},
		each: function(e) {
			return S.each(this, e)
		},
		map: function(n) {
			return this.pushStack(S.map(this, function(e, t) {
				return n.call(e, t, e)
			}))
		},
		slice: function() {
			return this.pushStack(s.apply(this, arguments))
		},
		first: function() {
			return this.eq(0)
		},
		last: function() {
			return this.eq(-1)
		},
		even: function() {
			return this.pushStack(S.grep(this, function(e, t) {
				return(t + 1) % 2
			}))
		},
		odd: function() {
			return this.pushStack(S.grep(this, function(e, t) {
				return t % 2
			}))
		},
		eq: function(e) {
			var t = this.length,
				n = +e + (e < 0 ? t : 0);
			return this.pushStack(0 <= n && n < t ? [this[n]] : [])
		},
		end: function() {
			return this.prevObject || this.constructor()
		},
		push: u,
		sort: t.sort,
		splice: t.splice
	}, S.extend = S.fn.extend = function() {
		var e, t, n, r, i, o, a = arguments[0] || {},
			s = 1,
			u = arguments.length,
			l = !1;
		for("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)
			if(null != (e = arguments[s]))
				for(t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r));
		return a
	}, S.extend({
		expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""),
		isReady: !0,
		error: function(e) {
			throw new Error(e)
		},
		noop: function() {},
		isPlainObject: function(e) {
			var t, n;
			return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof(n = v.call(t, "constructor") && t.constructor) && a.call(n) === l)
		},
		isEmptyObject: function(e) {
			var t;
			for(t in e) return !1;
			return !0
		},
		globalEval: function(e, t, n) {
			b(e, {
				nonce: t && t.nonce
			}, n)
		},
		each: function(e, t) {
			var n, r = 0;
			if(p(e)) {
				for(n = e.length; r < n; r++)
					if(!1 === t.call(e[r], r, e[r])) break
			} else
				for(r in e)
					if(!1 === t.call(e[r], r, e[r])) break;
			return e
		},
		makeArray: function(e, t) {
			var n = t || [];
			return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n
		},
		inArray: function(e, t, n) {
			return null == t ? -1 : i.call(t, e, n)
		},
		merge: function(e, t) {
			for(var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];
			return e.length = i, e
		},
		grep: function(e, t, n) {
			for(var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);
			return r
		},
		map: function(e, t, n) {
			var r, i, o = 0,
				a = [];
			if(p(e))
				for(r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);
			else
				for(o in e) null != (i = t(e[o], o, n)) && a.push(i);
			return g(a)
		},
		guid: 1,
		support: y
	}), "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) {
		n["[object " + t + "]"] = t.toLowerCase()
	});
	var d = function(n) {
		var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, S = "sizzle" + 1 * new Date,
			p = n.document,
			k = 0,
			r = 0,
			m = ue(),
			x = ue(),
			A = ue(),
			N = ue(),
			D = function(e, t) {
				return e === t && (l = !0), 0
			},
			j = {}.hasOwnProperty,
			t = [],
			q = t.pop,
			L = t.push,
			H = t.push,
			O = t.slice,
			P = function(e, t) {
				for(var n = 0, r = e.length; n < r; n++)
					if(e[n] === t) return n;
				return -1
			},
			R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
			M = "[\\x20\\t\\r\\n\\f]",
			I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
			W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]",
			F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)",
			B = new RegExp(M + "+", "g"),
			$ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"),
			_ = new RegExp("^" + M + "*," + M + "*"),
			z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"),
			U = new RegExp(M + "|>"),
			X = new RegExp(F),
			V = new RegExp("^" + I + "$"),
			G = {
				ID: new RegExp("^#(" + I + ")"),
				CLASS: new RegExp("^\\.(" + I + ")"),
				TAG: new RegExp("^(" + I + "|[*])"),
				ATTR: new RegExp("^" + W),
				PSEUDO: new RegExp("^" + F),
				CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"),
				bool: new RegExp("^(?:" + R + ")$", "i"),
				needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i")
			},
			Y = /HTML$/i,
			Q = /^(?:input|select|textarea|button)$/i,
			J = /^h\d$/i,
			K = /^[^{]+\{\s*\[native \w/,
			Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
			ee = /[+~]/,
			te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"),
			ne = function(e, t) {
				var n = "0x" + e.slice(1) - 65536;
				return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320))
			},
			re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
			ie = function(e, t) {
				return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e
			},
			oe = function() {
				T()
			},
			ae = be(function(e) {
				return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase()
			}, {
				dir: "parentNode",
				next: "legend"
			});
		try {
			H.apply(t = O.call(p.childNodes), p.childNodes), t[p.childNodes.length].nodeType
		} catch(e) {
			H = {
				apply: t.length ? function(e, t) {
					L.apply(e, O.call(t))
				} : function(e, t) {
					var n = e.length,
						r = 0;
					while(e[n++] = t[r++]);
					e.length = n - 1
				}
			}
		}

		function se(t, e, n, r) {
			var i, o, a, s, u, l, c, f = e && e.ownerDocument,
				p = e ? e.nodeType : 9;
			if(n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n;
			if(!r && (T(e), e = e || C, E)) {
				if(11 !== p && (u = Z.exec(t)))
					if(i = u[1]) {
						if(9 === p) {
							if(!(a = e.getElementById(i))) return n;
							if(a.id === i) return n.push(a), n
						} else if(f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n
					} else {
						if(u[2]) return H.apply(n, e.getElementsByTagName(t)), n;
						if((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n
					}
				if(d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) {
					if(c = t, f = e, 1 === p && (U.test(t) || z.test(t))) {
						(f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)), o = (l = h(t)).length;
						while(o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]);
						c = l.join(",")
					}
					try {
						return H.apply(n, f.querySelectorAll(c)), n
					} catch(e) {
						N(t, !0)
					} finally {
						s === S && e.removeAttribute("id")
					}
				}
			}
			return g(t.replace($, "$1"), e, n, r)
		}

		function ue() {
			var r = [];
			return function e(t, n) {
				return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n
			}
		}

		function le(e) {
			return e[S] = !0, e
		}

		function ce(e) {
			var t = C.createElement("fieldset");
			try {
				return !!e(t)
			} catch(e) {
				return !1
			} finally {
				t.parentNode && t.parentNode.removeChild(t), t = null
			}
		}

		function fe(e, t) {
			var n = e.split("|"),
				r = n.length;
			while(r--) b.attrHandle[n[r]] = t
		}

		function pe(e, t) {
			var n = t && e,
				r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;
			if(r) return r;
			if(n)
				while(n = n.nextSibling)
					if(n === t) return -1;
			return e ? 1 : -1
		}

		function de(t) {
			return function(e) {
				return "input" === e.nodeName.toLowerCase() && e.type === t
			}
		}

		function he(n) {
			return function(e) {
				var t = e.nodeName.toLowerCase();
				return("input" === t || "button" === t) && e.type === n
			}
		}

		function ge(t) {
			return function(e) {
				return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t
			}
		}

		function ve(a) {
			return le(function(o) {
				return o = +o, le(function(e, t) {
					var n, r = a([], e.length, o),
						i = r.length;
					while(i--) e[n = r[i]] && (e[n] = !(t[n] = e[n]))
				})
			})
		}

		function ye(e) {
			return e && "undefined" != typeof e.getElementsByTagName && e
		}
		for(e in d = se.support = {}, i = se.isXML = function(e) {
				var t = e.namespaceURI,
					n = (e.ownerDocument || e).documentElement;
				return !Y.test(t || n && n.nodeName || "HTML")
			}, T = se.setDocument = function(e) {
				var t, n, r = e ? e.ownerDocument || e : p;
				return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function(e) {
					return a.appendChild(e).appendChild(C.createElement("div")), "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length
				}), d.attributes = ce(function(e) {
					return e.className = "i", !e.getAttribute("className")
				}), d.getElementsByTagName = ce(function(e) {
					return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length
				}), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function(e) {
					return a.appendChild(e).id = S, !C.getElementsByName || !C.getElementsByName(S).length
				}), d.getById ? (b.filter.ID = function(e) {
					var t = e.replace(te, ne);
					return function(e) {
						return e.getAttribute("id") === t
					}
				}, b.find.ID = function(e, t) {
					if("undefined" != typeof t.getElementById && E) {
						var n = t.getElementById(e);
						return n ? [n] : []
					}
				}) : (b.filter.ID = function(e) {
					var n = e.replace(te, ne);
					return function(e) {
						var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
						return t && t.value === n
					}
				}, b.find.ID = function(e, t) {
					if("undefined" != typeof t.getElementById && E) {
						var n, r, i, o = t.getElementById(e);
						if(o) {
							if((n = o.getAttributeNode("id")) && n.value === e) return [o];
							i = t.getElementsByName(e), r = 0;
							while(o = i[r++])
								if((n = o.getAttributeNode("id")) && n.value === e) return [o]
						}
						return []
					}
				}), b.find.TAG = d.getElementsByTagName ? function(e, t) {
					return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0
				} : function(e, t) {
					var n, r = [],
						i = 0,
						o = t.getElementsByTagName(e);
					if("*" === e) {
						while(n = o[i++]) 1 === n.nodeType && r.push(n);
						return r
					}
					return o
				}, b.find.CLASS = d.getElementsByClassName && function(e, t) {
					if("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e)
				}, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function(e) {
					var t;
					a.appendChild(e).innerHTML = "<a id='" + S + "'></a><select id='" + S + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), (t = C.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"), e.querySelectorAll("\\\f"), v.push("[\\r\\n\\f]")
				}), ce(function(e) {
					e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
					var t = C.createElement("input");
					t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:")
				})), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function(e) {
					d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", F)
				}), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function(e, t) {
					var n = 9 === e.nodeType ? e.documentElement : e,
						r = t && t.parentNode;
					return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)))
				} : function(e, t) {
					if(t)
						while(t = t.parentNode)
							if(t === e) return !0;
					return !1
				}, D = t ? function(e, t) {
					if(e === t) return l = !0, 0;
					var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
					return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1)
				} : function(e, t) {
					if(e === t) return l = !0, 0;
					var n, r = 0,
						i = e.parentNode,
						o = t.parentNode,
						a = [e],
						s = [t];
					if(!i || !o) return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;
					if(i === o) return pe(e, t);
					n = e;
					while(n = n.parentNode) a.unshift(n);
					n = t;
					while(n = n.parentNode) s.unshift(n);
					while(a[r] === s[r]) r++;
					return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0
				}), C
			}, se.matches = function(e, t) {
				return se(e, null, null, t)
			}, se.matchesSelector = function(e, t) {
				if(T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try {
					var n = c.call(e, t);
					if(n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
				} catch(e) {
					N(t, !0)
				}
				return 0 < se(t, C, null, [e]).length
			}, se.contains = function(e, t) {
				return(e.ownerDocument || e) != C && T(e), y(e, t)
			}, se.attr = function(e, t) {
				(e.ownerDocument || e) != C && T(e);
				var n = b.attrHandle[t.toLowerCase()],
					r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;
				return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
			}, se.escape = function(e) {
				return(e + "").replace(re, ie)
			}, se.error = function(e) {
				throw new Error("Syntax error, unrecognized expression: " + e)
			}, se.uniqueSort = function(e) {
				var t, n = [],
					r = 0,
					i = 0;
				if(l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) {
					while(t = e[i++]) t === e[i] && (r = n.push(i));
					while(r--) e.splice(n[r], 1)
				}
				return u = null, e
			}, o = se.getText = function(e) {
				var t, n = "",
					r = 0,
					i = e.nodeType;
				if(i) {
					if(1 === i || 9 === i || 11 === i) {
						if("string" == typeof e.textContent) return e.textContent;
						for(e = e.firstChild; e; e = e.nextSibling) n += o(e)
					} else if(3 === i || 4 === i) return e.nodeValue
				} else
					while(t = e[r++]) n += o(t);
				return n
			}, (b = se.selectors = {
				cacheLength: 50,
				createPseudo: le,
				match: G,
				attrHandle: {},
				find: {},
				relative: {
					">": {
						dir: "parentNode",
						first: !0
					},
					" ": {
						dir: "parentNode"
					},
					"+": {
						dir: "previousSibling",
						first: !0
					},
					"~": {
						dir: "previousSibling"
					}
				},
				preFilter: {
					ATTR: function(e) {
						return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
					},
					CHILD: function(e) {
						return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e
					},
					PSEUDO: function(e) {
						var t, n = !e[6] && e[2];
						return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
					}
				},
				filter: {
					TAG: function(e) {
						var t = e.replace(te, ne).toLowerCase();
						return "*" === e ? function() {
							return !0
						} : function(e) {
							return e.nodeName && e.nodeName.toLowerCase() === t
						}
					},
					CLASS: function(e) {
						var t = m[e + " "];
						return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function(e) {
							return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
						})
					},
					ATTR: function(n, r, i) {
						return function(e) {
							var t = se.attr(e, n);
							return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-"))
						}
					},
					CHILD: function(h, e, t, g, v) {
						var y = "nth" !== h.slice(0, 3),
							m = "last" !== h.slice(-4),
							x = "of-type" === e;
						return 1 === g && 0 === v ? function(e) {
							return !!e.parentNode
						} : function(e, t, n) {
							var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling",
								c = e.parentNode,
								f = x && e.nodeName.toLowerCase(),
								p = !n && !x,
								d = !1;
							if(c) {
								if(y) {
									while(l) {
										a = e;
										while(a = a[l])
											if(x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;
										u = l = "only" === h && !u && "nextSibling"
									}
									return !0
								}
								if(u = [m ? c.firstChild : c.lastChild], m && p) {
									d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2], a = s && c.childNodes[s];
									while(a = ++s && a && a[l] || (d = s = 0) || u.pop())
										if(1 === a.nodeType && ++d && a === e) {
											i[h] = [k, s, d];
											break
										}
								} else if(p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d)
									while(a = ++s && a && a[l] || (d = s = 0) || u.pop())
										if((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e)) break;
								return(d -= v) === g || d % g == 0 && 0 <= d / g
							}
						}
					},
					PSEUDO: function(e, o) {
						var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e);
						return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function(e, t) {
							var n, r = a(e, o),
								i = r.length;
							while(i--) e[n = P(e, r[i])] = !(t[n] = r[i])
						}) : function(e) {
							return a(e, 0, t)
						}) : a
					}
				},
				pseudos: {
					not: le(function(e) {
						var r = [],
							i = [],
							s = f(e.replace($, "$1"));
						return s[S] ? le(function(e, t, n, r) {
							var i, o = s(e, null, r, []),
								a = e.length;
							while(a--)(i = o[a]) && (e[a] = !(t[a] = i))
						}) : function(e, t, n) {
							return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop()
						}
					}),
					has: le(function(t) {
						return function(e) {
							return 0 < se(t, e).length
						}
					}),
					contains: le(function(t) {
						return t = t.replace(te, ne),
							function(e) {
								return -1 < (e.textContent || o(e)).indexOf(t)
							}
					}),
					lang: le(function(n) {
						return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(),
							function(e) {
								var t;
								do {
									if(t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return(t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-")
								} while ((e = e.parentNode) && 1 === e.nodeType);
								return !1
							}
					}),
					target: function(e) {
						var t = n.location && n.location.hash;
						return t && t.slice(1) === e.id
					},
					root: function(e) {
						return e === a
					},
					focus: function(e) {
						return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
					},
					enabled: ge(!1),
					disabled: ge(!0),
					checked: function(e) {
						var t = e.nodeName.toLowerCase();
						return "input" === t && !!e.checked || "option" === t && !!e.selected
					},
					selected: function(e) {
						return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected
					},
					empty: function(e) {
						for(e = e.firstChild; e; e = e.nextSibling)
							if(e.nodeType < 6) return !1;
						return !0
					},
					parent: function(e) {
						return !b.pseudos.empty(e)
					},
					header: function(e) {
						return J.test(e.nodeName)
					},
					input: function(e) {
						return Q.test(e.nodeName)
					},
					button: function(e) {
						var t = e.nodeName.toLowerCase();
						return "input" === t && "button" === e.type || "button" === t
					},
					text: function(e) {
						var t;
						return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
					},
					first: ve(function() {
						return [0]
					}),
					last: ve(function(e, t) {
						return [t - 1]
					}),
					eq: ve(function(e, t, n) {
						return [n < 0 ? n + t : n]
					}),
					even: ve(function(e, t) {
						for(var n = 0; n < t; n += 2) e.push(n);
						return e
					}),
					odd: ve(function(e, t) {
						for(var n = 1; n < t; n += 2) e.push(n);
						return e
					}),
					lt: ve(function(e, t, n) {
						for(var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r);
						return e
					}),
					gt: ve(function(e, t, n) {
						for(var r = n < 0 ? n + t : n; ++r < t;) e.push(r);
						return e
					})
				}
			}).pseudos.nth = b.pseudos.eq, {
				radio: !0,
				checkbox: !0,
				file: !0,
				password: !0,
				image: !0
			}) b.pseudos[e] = de(e);
		for(e in {
				submit: !0,
				reset: !0
			}) b.pseudos[e] = he(e);

		function me() {}

		function xe(e) {
			for(var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value;
			return r
		}

		function be(s, e, t) {
			var u = e.dir,
				l = e.next,
				c = l || u,
				f = t && "parentNode" === c,
				p = r++;
			return e.first ? function(e, t, n) {
				while(e = e[u])
					if(1 === e.nodeType || f) return s(e, t, n);
				return !1
			} : function(e, t, n) {
				var r, i, o, a = [k, p];
				if(n) {
					while(e = e[u])
						if((1 === e.nodeType || f) && s(e, t, n)) return !0
				} else
					while(e = e[u])
						if(1 === e.nodeType || f)
							if(i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e;
							else {
								if((r = i[c]) && r[0] === k && r[1] === p) return a[2] = r[2];
								if((i[c] = a)[2] = s(e, t, n)) return !0
							} return !1
			}
		}

		function we(i) {
			return 1 < i.length ? function(e, t, n) {
				var r = i.length;
				while(r--)
					if(!i[r](e, t, n)) return !1;
				return !0
			} : i[0]
		}

		function Te(e, t, n, r, i) {
			for(var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s)));
			return a
		}

		function Ce(d, h, g, v, y, e) {
			return v && !v[S] && (v = Ce(v)), y && !y[S] && (y = Ce(y, e)), le(function(e, t, n, r) {
				var i, o, a, s = [],
					u = [],
					l = t.length,
					c = e || function(e, t, n) {
						for(var r = 0, i = t.length; r < i; r++) se(e, t[r], n);
						return n
					}(h || "*", n.nodeType ? [n] : n, []),
					f = !d || !e && h ? c : Te(c, s, d, n, r),
					p = g ? y || (e ? d : l || v) ? [] : t : f;
				if(g && g(f, p, n, r), v) {
					i = Te(p, u), v(i, [], n, r), o = i.length;
					while(o--)(a = i[o]) && (p[u[o]] = !(f[u[o]] = a))
				}
				if(e) {
					if(y || d) {
						if(y) {
							i = [], o = p.length;
							while(o--)(a = p[o]) && i.push(f[o] = a);
							y(null, p = [], i, r)
						}
						o = p.length;
						while(o--)(a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a))
					}
				} else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p)
			})
		}

		function Ee(e) {
			for(var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function(e) {
					return e === i
				}, a, !0), l = be(function(e) {
					return -1 < P(i, e)
				}, a, !0), c = [function(e, t, n) {
					var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));
					return i = null, r
				}]; s < r; s++)
				if(t = b.relative[e[s].type]) c = [be(we(c), t)];
				else {
					if((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) {
						for(n = ++s; n < r; n++)
							if(b.relative[e[n].type]) break;
						return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({
							value: " " === e[s - 2].type ? "*" : ""
						})).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e))
					}
					c.push(t)
				}
			return we(c)
		}
		return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function(e, t) {
			var n, r, i, o, a, s, u, l = x[e + " "];
			if(l) return t ? 0 : l.slice(0);
			a = e, s = [], u = b.preFilter;
			while(a) {
				for(o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({
						value: n,
						type: r[0].replace($, " ")
					}), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({
					value: n,
					type: o,
					matches: r
				}), a = a.slice(n.length));
				if(!n) break
			}
			return t ? a.length : a ? se.error(e) : x(e, s).slice(0)
		}, f = se.compile = function(e, t) {
			var n, v, y, m, x, r, i = [],
				o = [],
				a = A[e + " "];
			if(!a) {
				t || (t = h(e)), n = t.length;
				while(n--)(a = Ee(t[n]))[S] ? i.push(a) : o.push(a);
				(a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function(e, t, n, r, i) {
					var o, a, s, u = 0,
						l = "0",
						c = e && [],
						f = [],
						p = w,
						d = e || x && b.find.TAG("*", i),
						h = k += null == p ? 1 : Math.random() || .1,
						g = d.length;
					for(i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) {
						if(x && o) {
							a = 0, t || o.ownerDocument == C || (T(o), n = !E);
							while(s = v[a++])
								if(s(o, t || C, n)) {
									r.push(o);
									break
								}
							i && (k = h)
						}
						m && ((o = !s && o) && u--, e && c.push(o))
					}
					if(u += l, m && l !== u) {
						a = 0;
						while(s = y[a++]) s(c, f, t, n);
						if(e) {
							if(0 < u)
								while(l--) c[l] || f[l] || (f[l] = q.call(r));
							f = Te(f)
						}
						H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r)
					}
					return i && (k = h, w = p), c
				}, m ? le(r) : r))).selector = e
			}
			return a
		}, g = se.select = function(e, t, n, r) {
			var i, o, a, s, u, l = "function" == typeof e && e,
				c = !r && h(e = l.selector || e);
			if(n = n || [], 1 === c.length) {
				if(2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {
					if(!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;
					l && (t = t.parentNode), e = e.slice(o.shift().value.length)
				}
				i = G.needsContext.test(e) ? 0 : o.length;
				while(i--) {
					if(a = o[i], b.relative[s = a.type]) break;
					if((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) {
						if(o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n;
						break
					}
				}
			}
			return(l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n
		}, d.sortStable = S.split("").sort(D).join("") === S, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function(e) {
			return 1 & e.compareDocumentPosition(C.createElement("fieldset"))
		}), ce(function(e) {
			return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href")
		}) || fe("type|href|height|width", function(e, t, n) {
			if(!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
		}), d.attributes && ce(function(e) {
			return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
		}) || fe("value", function(e, t, n) {
			if(!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue
		}), ce(function(e) {
			return null == e.getAttribute("disabled")
		}) || fe(R, function(e, t, n) {
			var r;
			if(!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null
		}), se
	}(C);
	S.find = d, S.expr = d.selectors, S.expr[":"] = S.expr.pseudos, S.uniqueSort = S.unique = d.uniqueSort, S.text = d.getText, S.isXMLDoc = d.isXML, S.contains = d.contains, S.escapeSelector = d.escape;
	var h = function(e, t, n) {
			var r = [],
				i = void 0 !== n;
			while((e = e[t]) && 9 !== e.nodeType)
				if(1 === e.nodeType) {
					if(i && S(e).is(n)) break;
					r.push(e)
				}
			return r
		},
		T = function(e, t) {
			for(var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
			return n
		},
		k = S.expr.match.needsContext;

	function A(e, t) {
		return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
	}
	var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;

	function D(e, n, r) {
		return m(n) ? S.grep(e, function(e, t) {
			return !!n.call(e, t, e) !== r
		}) : n.nodeType ? S.grep(e, function(e) {
			return e === n !== r
		}) : "string" != typeof n ? S.grep(e, function(e) {
			return -1 < i.call(n, e) !== r
		}) : S.filter(n, e, r)
	}
	S.filter = function(e, t, n) {
		var r = t[0];
		return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function(e) {
			return 1 === e.nodeType
		}))
	}, S.fn.extend({
		find: function(e) {
			var t, n, r = this.length,
				i = this;
			if("string" != typeof e) return this.pushStack(S(e).filter(function() {
				for(t = 0; t < r; t++)
					if(S.contains(i[t], this)) return !0
			}));
			for(n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n);
			return 1 < r ? S.uniqueSort(n) : n
		},
		filter: function(e) {
			return this.pushStack(D(this, e || [], !1))
		},
		not: function(e) {
			return this.pushStack(D(this, e || [], !0))
		},
		is: function(e) {
			return !!D(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1).length
		}
	});
	var j, q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
	(S.fn.init = function(e, t, n) {
		var r, i;
		if(!e) return this;
		if(n = n || j, "string" == typeof e) {
			if(!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);
			if(r[1]) {
				if(t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t))
					for(r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);
				return this
			}
			return(i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this
		}
		return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this)
	}).prototype = S.fn, j = S(E);
	var L = /^(?:parents|prev(?:Until|All))/,
		H = {
			children: !0,
			contents: !0,
			next: !0,
			prev: !0
		};

	function O(e, t) {
		while((e = e[t]) && 1 !== e.nodeType);
		return e
	}
	S.fn.extend({
		has: function(e) {
			var t = S(e, this),
				n = t.length;
			return this.filter(function() {
				for(var e = 0; e < n; e++)
					if(S.contains(this, t[e])) return !0
			})
		},
		closest: function(e, t) {
			var n, r = 0,
				i = this.length,
				o = [],
				a = "string" != typeof e && S(e);
			if(!k.test(e))
				for(; r < i; r++)
					for(n = this[r]; n && n !== t; n = n.parentNode)
						if(n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))) {
							o.push(n);
							break
						}
			return this.pushStack(1 < o.length ? S.uniqueSort(o) : o)
		},
		index: function(e) {
			return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
		},
		add: function(e, t) {
			return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t))))
		},
		addBack: function(e) {
			return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
		}
	}), S.each({
		parent: function(e) {
			var t = e.parentNode;
			return t && 11 !== t.nodeType ? t : null
		},
		parents: function(e) {
			return h(e, "parentNode")
		},
		parentsUntil: function(e, t, n) {
			return h(e, "parentNode", n)
		},
		next: function(e) {
			return O(e, "nextSibling")
		},
		prev: function(e) {
			return O(e, "previousSibling")
		},
		nextAll: function(e) {
			return h(e, "nextSibling")
		},
		prevAll: function(e) {
			return h(e, "previousSibling")
		},
		nextUntil: function(e, t, n) {
			return h(e, "nextSibling", n)
		},
		prevUntil: function(e, t, n) {
			return h(e, "previousSibling", n)
		},
		siblings: function(e) {
			return T((e.parentNode || {}).firstChild, e)
		},
		children: function(e) {
			return T(e.firstChild)
		},
		contents: function(e) {
			return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes))
		}
	}, function(r, i) {
		S.fn[r] = function(e, t) {
			var n = S.map(this, i, e);
			return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = S.filter(t, n)), 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), this.pushStack(n)
		}
	});
	var P = /[^\x20\t\r\n\f]+/g;

	function R(e) {
		return e
	}

	function M(e) {
		throw e
	}

	function I(e, t, n, r) {
		var i;
		try {
			e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r))
		} catch(e) {
			n.apply(void 0, [e])
		}
	}
	S.Callbacks = function(r) {
		var e, n;
		r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function(e, t) {
			n[t] = !0
		}), n) : S.extend({}, r);
		var i, t, o, a, s = [],
			u = [],
			l = -1,
			c = function() {
				for(a = a || r.once, o = i = !0; u.length; l = -1) {
					t = u.shift();
					while(++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1)
				}
				r.memory || (t = !1), i = !1, a && (s = t ? [] : "")
			},
			f = {
				add: function() {
					return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) {
						S.each(e, function(e, t) {
							m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t)
						})
					}(arguments), t && !i && c()), this
				},
				remove: function() {
					return S.each(arguments, function(e, t) {
						var n;
						while(-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l--
					}), this
				},
				has: function(e) {
					return e ? -1 < S.inArray(e, s) : 0 < s.length
				},
				empty: function() {
					return s && (s = []), this
				},
				disable: function() {
					return a = u = [], s = t = "", this
				},
				disabled: function() {
					return !s
				},
				lock: function() {
					return a = u = [], t || i || (s = t = ""), this
				},
				locked: function() {
					return !!a
				},
				fireWith: function(e, t) {
					return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this
				},
				fire: function() {
					return f.fireWith(this, arguments), this
				},
				fired: function() {
					return !!o
				}
			};
		return f
	}, S.extend({
		Deferred: function(e) {
			var o = [
					["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2],
					["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"],
					["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"]
				],
				i = "pending",
				a = {
					state: function() {
						return i
					},
					always: function() {
						return s.done(arguments).fail(arguments), this
					},
					"catch": function(e) {
						return a.then(null, e)
					},
					pipe: function() {
						var i = arguments;
						return S.Deferred(function(r) {
							S.each(o, function(e, t) {
								var n = m(i[t[4]]) && i[t[4]];
								s[t[1]](function() {
									var e = n && n.apply(this, arguments);
									e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments)
								})
							}), i = null
						}).promise()
					},
					then: function(t, n, r) {
						var u = 0;

						function l(i, o, a, s) {
							return function() {
								var n = this,
									r = arguments,
									e = function() {
										var e, t;
										if(!(i < u)) {
											if((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution");
											t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r))
										}
									},
									t = s ? e : function() {
										try {
											e()
										} catch(e) {
											S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r))
										}
									};
								i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t))
							}
						}
						return S.Deferred(function(e) {
							o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : R)), o[2][3].add(l(0, e, m(n) ? n : M))
						}).promise()
					},
					promise: function(e) {
						return null != e ? S.extend(e, a) : a
					}
				},
				s = {};
			return S.each(o, function(e, t) {
				var n = t[2],
					r = t[5];
				a[t[1]] = n.add, r && n.add(function() {
					i = r
				}, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function() {
					return s[t[0] + "With"](this === s ? void 0 : this, arguments), this
				}, s[t[0] + "With"] = n.fireWith
			}), a.promise(s), e && e.call(s, s), s
		},
		when: function(e) {
			var n = arguments.length,
				t = n,
				r = Array(t),
				i = s.call(arguments),
				o = S.Deferred(),
				a = function(t) {
					return function(e) {
						r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i)
					}
				};
			if(n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then();
			while(t--) I(i[t], a(t), o.reject);
			return o.promise()
		}
	});
	var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
	S.Deferred.exceptionHook = function(e, t) {
		C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t)
	}, S.readyException = function(e) {
		C.setTimeout(function() {
			throw e
		})
	};
	var F = S.Deferred();

	function B() {
		E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), S.ready()
	}
	S.fn.ready = function(e) {
		return F.then(e)["catch"](function(e) {
			S.readyException(e)
		}), this
	}, S.extend({
		isReady: !1,
		readyWait: 1,
		ready: function(e) {
			(!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S])
		}
	}), S.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B));
	var $ = function(e, t, n, r, i, o, a) {
			var s = 0,
				u = e.length,
				l = null == n;
			if("object" === w(n))
				for(s in i = !0, n) $(e, t, s, n[s], !0, o, a);
			else if(void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function(e, t, n) {
					return l.call(S(e), n)
				})), t))
				for(; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));
			return i ? e : l ? t.call(e) : u ? t(e[0], n) : o
		},
		_ = /^-ms-/,
		z = /-([a-z])/g;

	function U(e, t) {
		return t.toUpperCase()
	}

	function X(e) {
		return e.replace(_, "ms-").replace(z, U)
	}
	var V = function(e) {
		return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
	};

	function G() {
		this.expando = S.expando + G.uid++
	}
	G.uid = 1, G.prototype = {
		cache: function(e) {
			var t = e[this.expando];
			return t || (t = Object.create(null), V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, {
				value: t,
				configurable: !0
			}))), t
		},
		set: function(e, t, n) {
			var r, i = this.cache(e);
			if("string" == typeof t) i[X(t)] = n;
			else
				for(r in t) i[X(r)] = t[r];
			return i
		},
		get: function(e, t) {
			return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)]
		},
		access: function(e, t, n) {
			return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t)
		},
		remove: function(e, t) {
			var n, r = e[this.expando];
			if(void 0 !== r) {
				if(void 0 !== t) {
					n = (t = Array.isArray(t) ? t.map(X) : (t = X(t)) in r ? [t] : t.match(P) || []).length;
					while(n--) delete r[t[n]]
				}(void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando])
			}
		},
		hasData: function(e) {
			var t = e[this.expando];
			return void 0 !== t && !S.isEmptyObject(t)
		}
	};
	var Y = new G,
		Q = new G,
		J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
		K = /[A-Z]/g;

	function Z(e, t, n) {
		var r, i;
		if(void 0 === n && 1 === e.nodeType)
			if(r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof(n = e.getAttribute(r))) {
				try {
					n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i)
				} catch(e) {}
				Q.set(e, t, n)
			} else n = void 0;
		return n
	}
	S.extend({
		hasData: function(e) {
			return Q.hasData(e) || Y.hasData(e)
		},
		data: function(e, t, n) {
			return Q.access(e, t, n)
		},
		removeData: function(e, t) {
			Q.remove(e, t)
		},
		_data: function(e, t, n) {
			return Y.access(e, t, n)
		},
		_removeData: function(e, t) {
			Y.remove(e, t)
		}
	}), S.fn.extend({
		data: function(n, e) {
			var t, r, i, o = this[0],
				a = o && o.attributes;
			if(void 0 === n) {
				if(this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) {
					t = a.length;
					while(t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r]));
					Y.set(o, "hasDataAttrs", !0)
				}
				return i
			}
			return "object" == typeof n ? this.each(function() {
				Q.set(this, n)
			}) : $(this, function(e) {
				var t;
				if(o && void 0 === e) return void 0 !== (t = Q.get(o, n)) ? t : void 0 !== (t = Z(o, n)) ? t : void 0;
				this.each(function() {
					Q.set(this, n, e)
				})
			}, null, e, 1 < arguments.length, null, !0)
		},
		removeData: function(e) {
			return this.each(function() {
				Q.remove(this, e)
			})
		}
	}), S.extend({
		queue: function(e, t, n) {
			var r;
			if(e) return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || []
		},
		dequeue: function(e, t) {
			t = t || "fx";
			var n = S.queue(e, t),
				r = n.length,
				i = n.shift(),
				o = S._queueHooks(e, t);
			"inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function() {
				S.dequeue(e, t)
			}, o)), !r && o && o.empty.fire()
		},
		_queueHooks: function(e, t) {
			var n = t + "queueHooks";
			return Y.get(e, n) || Y.access(e, n, {
				empty: S.Callbacks("once memory").add(function() {
					Y.remove(e, [t + "queue", n])
				})
			})
		}
	}), S.fn.extend({
		queue: function(t, n) {
			var e = 2;
			return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this : this.each(function() {
				var e = S.queue(this, t, n);
				S._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t)
			})
		},
		dequeue: function(e) {
			return this.each(function() {
				S.dequeue(this, e)
			})
		},
		clearQueue: function(e) {
			return this.queue(e || "fx", [])
		},
		promise: function(e, t) {
			var n, r = 1,
				i = S.Deferred(),
				o = this,
				a = this.length,
				s = function() {
					--r || i.resolveWith(o, [o])
				};
			"string" != typeof e && (t = e, e = void 0), e = e || "fx";
			while(a--)(n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s));
			return s(), i.promise(t)
		}
	});
	var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
		te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"),
		ne = ["Top", "Right", "Bottom", "Left"],
		re = E.documentElement,
		ie = function(e) {
			return S.contains(e.ownerDocument, e)
		},
		oe = {
			composed: !0
		};
	re.getRootNode && (ie = function(e) {
		return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument
	});
	var ae = function(e, t) {
		return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display")
	};

	function se(e, t, n, r) {
		var i, o, a = 20,
			s = r ? function() {
				return r.cur()
			} : function() {
				return S.css(e, t, "")
			},
			u = s(),
			l = n && n[3] || (S.cssNumber[t] ? "" : "px"),
			c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t));
		if(c && c[3] !== l) {
			u /= 2, l = l || c[3], c = +u || 1;
			while(a--) S.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o;
			c *= 2, S.style(e, t, c + l), n = n || []
		}
		return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i
	}
	var ue = {};

	function le(e, t) {
		for(var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n)));
		for(c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);
		return e
	}
	S.fn.extend({
		show: function() {
			return le(this, !0)
		},
		hide: function() {
			return le(this)
		},
		toggle: function(e) {
			return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
				ae(this) ? S(this).show() : S(this).hide()
			})
		}
	});
	var ce, fe, pe = /^(?:checkbox|radio)$/i,
		de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i,
		he = /^$|^module$|\/(?:java|ecma)script/i;
	ce = E.createDocumentFragment().appendChild(E.createElement("div")), (fe = E.createElement("input")).setAttribute("type", "radio"), fe.setAttribute("checked", "checked"), fe.setAttribute("name", "t"), ce.appendChild(fe), y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked, ce.innerHTML = "<textarea>x</textarea>", y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue, ce.innerHTML = "<option></option>", y.option = !!ce.lastChild;
	var ge = {
		thead: [1, "<table>", "</table>"],
		col: [2, "<table><colgroup>", "</colgroup></table>"],
		tr: [2, "<table><tbody>", "</tbody></table>"],
		td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
		_default: [0, "", ""]
	};

	function ve(e, t) {
		var n;
		return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? S.merge([e], n) : n
	}

	function ye(e, t) {
		for(var n = 0, r = e.length; n < r; n++) Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval"))
	}
	ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td, y.option || (ge.optgroup = ge.option = [1, "<select multiple='multiple'>", "</select>"]);
	var me = /<|&#?\w+;/;

	function xe(e, t, n, r, i) {
		for(var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)
			if((o = e[d]) || 0 === o)
				if("object" === w(o)) S.merge(p, o.nodeType ? [o] : o);
				else if(me.test(o)) {
			a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2], c = u[0];
			while(c--) a = a.lastChild;
			S.merge(p, a.childNodes), (a = f.firstChild).textContent = ""
		} else p.push(t.createTextNode(o));
		f.textContent = "", d = 0;
		while(o = p[d++])
			if(r && -1 < S.inArray(o, r)) i && i.push(o);
			else if(l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) {
			c = 0;
			while(o = a[c++]) he.test(o.type || "") && n.push(o)
		}
		return f
	}
	var be = /^key/,
		we = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
		Te = /^([^.]*)(?:\.(.+)|)/;

	function Ce() {
		return !0
	}

	function Ee() {
		return !1
	}

	function Se(e, t) {
		return e === function() {
			try {
				return E.activeElement
			} catch(e) {}
		}() == ("focus" === t)
	}

	function ke(e, t, n, r, i, o) {
		var a, s;
		if("object" == typeof t) {
			for(s in "string" != typeof n && (r = r || n, n = void 0), t) ke(e, s, n, r, t[s], o);
			return e
		}
		if(null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Ee;
		else if(!i) return e;
		return 1 === o && (a = i, (i = function(e) {
			return S().off(e), a.apply(this, arguments)
		}).guid = a.guid || (a.guid = S.guid++)), e.each(function() {
			S.event.add(this, t, i, r, n)
		})
	}

	function Ae(e, i, o) {
		o ? (Y.set(e, i, !1), S.event.add(e, i, {
			namespace: !1,
			handler: function(e) {
				var t, n, r = Y.get(this, i);
				if(1 & e.isTrigger && this[i]) {
					if(r.length)(S.event.special[i] || {}).delegateType && e.stopPropagation();
					else if(r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value
				} else r.length && (Y.set(this, i, {
					value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this)
				}), e.stopImmediatePropagation())
			}
		})) : void 0 === Y.get(e, i) && S.event.add(e, i, Ce)
	}
	S.event = {
		global: {},
		add: function(t, e, n, r, i) {
			var o, a, s, u, l, c, f, p, d, h, g, v = Y.get(t);
			if(V(t)) {
				n.handler && (n = (o = n).handler, i = o.selector), i && S.find.matchesSelector(re, i), n.guid || (n.guid = S.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function(e) {
					return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0
				}), l = (e = (e || "").match(P) || [""]).length;
				while(l--) d = g = (s = Te.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({
					type: d,
					origType: g,
					data: r,
					handler: n,
					guid: n.guid,
					selector: i,
					needsContext: i && S.expr.match.needsContext.test(i),
					namespace: h.join(".")
				}, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0)
			}
		},
		remove: function(e, t, n, r, i) {
			var o, a, s, u, l, c, f, p, d, h, g, v = Y.hasData(e) && Y.get(e);
			if(v && (u = v.events)) {
				l = (t = (t || "").match(P) || [""]).length;
				while(l--)
					if(d = g = (s = Te.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) {
						f = S.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length;
						while(o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
						a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d])
					} else
						for(d in u) S.event.remove(e, d + t[l], n, r, !0);
				S.isEmptyObject(u) && Y.remove(e, "handle events")
			}
		},
		dispatch: function(e) {
			var t, n, r, i, o, a, s = new Array(arguments.length),
				u = S.event.fix(e),
				l = (Y.get(this, "events") || Object.create(null))[u.type] || [],
				c = S.event.special[u.type] || {};
			for(s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t];
			if(u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) {
				a = S.event.handlers.call(this, u, l), t = 0;
				while((i = a[t++]) && !u.isPropagationStopped()) {
					u.currentTarget = i.elem, n = 0;
					while((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation()))
				}
				return c.postDispatch && c.postDispatch.call(this, u), u.result
			}
		},
		handlers: function(e, t) {
			var n, r, i, o, a, s = [],
				u = t.delegateCount,
				l = e.target;
			if(u && l.nodeType && !("click" === e.type && 1 <= e.button))
				for(; l !== this; l = l.parentNode || this)
					if(1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) {
						for(o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r);
						o.length && s.push({
							elem: l,
							handlers: o
						})
					}
			return l = this, u < t.length && s.push({
				elem: l,
				handlers: t.slice(u)
			}), s
		},
		addProp: function(t, e) {
			Object.defineProperty(S.Event.prototype, t, {
				enumerable: !0,
				configurable: !0,
				get: m(e) ? function() {
					if(this.originalEvent) return e(this.originalEvent)
				} : function() {
					if(this.originalEvent) return this.originalEvent[t]
				},
				set: function(e) {
					Object.defineProperty(this, t, {
						enumerable: !0,
						configurable: !0,
						writable: !0,
						value: e
					})
				}
			})
		},
		fix: function(e) {
			return e[S.expando] ? e : new S.Event(e)
		},
		special: {
			load: {
				noBubble: !0
			},
			click: {
				setup: function(e) {
					var t = this || e;
					return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click", Ce), !1
				},
				trigger: function(e) {
					var t = this || e;
					return pe.test(t.type) && t.click && A(t, "input") && Ae(t, "click"), !0
				},
				_default: function(e) {
					var t = e.target;
					return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a")
				}
			},
			beforeunload: {
				postDispatch: function(e) {
					void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result)
				}
			}
		}
	}, S.removeEvent = function(e, t, n) {
		e.removeEventListener && e.removeEventListener(t, n)
	}, S.Event = function(e, t) {
		if(!(this instanceof S.Event)) return new S.Event(e, t);
		e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? Ce : Ee, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && S.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[S.expando] = !0
	}, S.Event.prototype = {
		constructor: S.Event,
		isDefaultPrevented: Ee,
		isPropagationStopped: Ee,
		isImmediatePropagationStopped: Ee,
		isSimulated: !1,
		preventDefault: function() {
			var e = this.originalEvent;
			this.isDefaultPrevented = Ce, e && !this.isSimulated && e.preventDefault()
		},
		stopPropagation: function() {
			var e = this.originalEvent;
			this.isPropagationStopped = Ce, e && !this.isSimulated && e.stopPropagation()
		},
		stopImmediatePropagation: function() {
			var e = this.originalEvent;
			this.isImmediatePropagationStopped = Ce, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation()
		}
	}, S.each({
		altKey: !0,
		bubbles: !0,
		cancelable: !0,
		changedTouches: !0,
		ctrlKey: !0,
		detail: !0,
		eventPhase: !0,
		metaKey: !0,
		pageX: !0,
		pageY: !0,
		shiftKey: !0,
		view: !0,
		"char": !0,
		code: !0,
		charCode: !0,
		key: !0,
		keyCode: !0,
		button: !0,
		buttons: !0,
		clientX: !0,
		clientY: !0,
		offsetX: !0,
		offsetY: !0,
		pointerId: !0,
		pointerType: !0,
		screenX: !0,
		screenY: !0,
		targetTouches: !0,
		toElement: !0,
		touches: !0,
		which: function(e) {
			var t = e.button;
			return null == e.which && be.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && we.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which
		}
	}, S.event.addProp), S.each({
		focus: "focusin",
		blur: "focusout"
	}, function(e, t) {
		S.event.special[e] = {
			setup: function() {
				return Ae(this, e, Se), !1
			},
			trigger: function() {
				return Ae(this, e), !0
			},
			delegateType: t
		}
	}), S.each({
		mouseenter: "mouseover",
		mouseleave: "mouseout",
		pointerenter: "pointerover",
		pointerleave: "pointerout"
	}, function(e, i) {
		S.event.special[e] = {
			delegateType: i,
			bindType: i,
			handle: function(e) {
				var t, n = e.relatedTarget,
					r = e.handleObj;
				return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t
			}
		}
	}), S.fn.extend({
		on: function(e, t, n, r) {
			return ke(this, e, t, n, r)
		},
		one: function(e, t, n, r) {
			return ke(this, e, t, n, r, 1)
		},
		off: function(e, t, n) {
			var r, i;
			if(e && e.preventDefault && e.handleObj) return r = e.handleObj, S(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this;
			if("object" == typeof e) {
				for(i in e) this.off(i, t, e[i]);
				return this
			}
			return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Ee), this.each(function() {
				S.event.remove(this, e, n, t)
			})
		}
	});
	var Ne = /<script|<style|<link/i,
		De = /checked\s*(?:[^=]|=\s*.checked.)/i,
		je = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;

	function qe(e, t) {
		return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && S(e).children("tbody")[0] || e
	}

	function Le(e) {
		return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e
	}

	function He(e) {
		return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e
	}

	function Oe(e, t) {
		var n, r, i, o, a, s;
		if(1 === t.nodeType) {
			if(Y.hasData(e) && (s = Y.get(e).events))
				for(i in Y.remove(t, "handle events"), s)
					for(n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]);
			Q.hasData(e) && (o = Q.access(e), a = S.extend({}, o), Q.set(t, a))
		}
	}

	function Pe(n, r, i, o) {
		r = g(r);
		var e, t, a, s, u, l, c = 0,
			f = n.length,
			p = f - 1,
			d = r[0],
			h = m(d);
		if(h || 1 < f && "string" == typeof d && !y.checkClone && De.test(d)) return n.each(function(e) {
			var t = n.eq(e);
			h && (r[0] = d.call(this, e, t.html())), Pe(t, r, i, o)
		});
		if(f && (t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) {
			for(s = (a = S.map(ve(e, "script"), Le)).length; c < f; c++) u = e, c !== p && (u = S.clone(u, !0, !0), s && S.merge(a, ve(u, "script"))), i.call(n[c], u, c);
			if(s)
				for(l = a[a.length - 1].ownerDocument, S.map(a, He), c = 0; c < s; c++) u = a[c], he.test(u.type || "") && !Y.access(u, "globalEval") && S.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? S._evalUrl && !u.noModule && S._evalUrl(u.src, {
					nonce: u.nonce || u.getAttribute("nonce")
				}, l) : b(u.textContent.replace(je, ""), u, l))
		}
		return n
	}

	function Re(e, t, n) {
		for(var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || S.cleanData(ve(r)), r.parentNode && (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r));
		return e
	}
	S.extend({
		htmlPrefilter: function(e) {
			return e
		},
		clone: function(e, t, n) {
			var r, i, o, a, s, u, l, c = e.cloneNode(!0),
				f = ie(e);
			if(!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || S.isXMLDoc(e)))
				for(a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue);
			if(t)
				if(n)
					for(o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Oe(o[r], a[r]);
				else Oe(e, c);
			return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c
		},
		cleanData: function(e) {
			for(var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++)
				if(V(n)) {
					if(t = n[Y.expando]) {
						if(t.events)
							for(r in t.events) i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle);
						n[Y.expando] = void 0
					}
					n[Q.expando] && (n[Q.expando] = void 0)
				}
		}
	}), S.fn.extend({
		detach: function(e) {
			return Re(this, e, !0)
		},
		remove: function(e) {
			return Re(this, e)
		},
		text: function(e) {
			return $(this, function(e) {
				return void 0 === e ? S.text(this) : this.empty().each(function() {
					1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
				})
			}, null, e, arguments.length)
		},
		append: function() {
			return Pe(this, arguments, function(e) {
				1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || qe(this, e).appendChild(e)
			})
		},
		prepend: function() {
			return Pe(this, arguments, function(e) {
				if(1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
					var t = qe(this, e);
					t.insertBefore(e, t.firstChild)
				}
			})
		},
		before: function() {
			return Pe(this, arguments, function(e) {
				this.parentNode && this.parentNode.insertBefore(e, this)
			})
		},
		after: function() {
			return Pe(this, arguments, function(e) {
				this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
			})
		},
		empty: function() {
			for(var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (S.cleanData(ve(e, !1)), e.textContent = "");
			return this
		},
		clone: function(e, t) {
			return e = null != e && e, t = null == t ? e : t, this.map(function() {
				return S.clone(this, e, t)
			})
		},
		html: function(e) {
			return $(this, function(e) {
				var t = this[0] || {},
					n = 0,
					r = this.length;
				if(void 0 === e && 1 === t.nodeType) return t.innerHTML;
				if("string" == typeof e && !Ne.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) {
					e = S.htmlPrefilter(e);
					try {
						for(; n < r; n++) 1 === (t = this[n] || {}).nodeType && (S.cleanData(ve(t, !1)), t.innerHTML = e);
						t = 0
					} catch(e) {}
				}
				t && this.empty().append(e)
			}, null, e, arguments.length)
		},
		replaceWith: function() {
			var n = [];
			return Pe(this, arguments, function(e) {
				var t = this.parentNode;
				S.inArray(this, n) < 0 && (S.cleanData(ve(this)), t && t.replaceChild(e, this))
			}, n)
		}
	}), S.each({
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function(e, a) {
		S.fn[e] = function(e) {
			for(var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) t = o === i ? this : this.clone(!0), S(r[o])[a](t), u.apply(n, t.get());
			return this.pushStack(n)
		}
	});
	var Me = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"),
		Ie = function(e) {
			var t = e.ownerDocument.defaultView;
			return t && t.opener || (t = C), t.getComputedStyle(e)
		},
		We = function(e, t, n) {
			var r, i, o = {};
			for(i in t) o[i] = e.style[i], e.style[i] = t[i];
			for(i in r = n.call(e), t) e.style[i] = o[i];
			return r
		},
		Fe = new RegExp(ne.join("|"), "i");

	function Be(e, t, n) {
		var r, i, o, a, s = e.style;
		return(n = n || Ie(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || ie(e) || (a = S.style(e, t)), !y.pixelBoxStyles() && Me.test(a) && Fe.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a
	}

	function $e(e, t) {
		return {
			get: function() {
				if(!e()) return(this.get = t).apply(this, arguments);
				delete this.get
			}
		}
	}! function() {
		function e() {
			if(l) {
				u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", re.appendChild(u).appendChild(l);
				var e = C.getComputedStyle(l);
				n = "1%" !== e.top, s = 12 === t(e.marginLeft), l.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), l.style.position = "absolute", i = 12 === t(l.offsetWidth / 3), re.removeChild(u), l = null
			}
		}

		function t(e) {
			return Math.round(parseFloat(e))
		}
		var n, r, i, o, a, s, u = E.createElement("div"),
			l = E.createElement("div");
		l.style && (l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === l.style.backgroundClip, S.extend(y, {
			boxSizingReliable: function() {
				return e(), r
			},
			pixelBoxStyles: function() {
				return e(), o
			},
			pixelPosition: function() {
				return e(), n
			},
			reliableMarginLeft: function() {
				return e(), s
			},
			scrollboxSize: function() {
				return e(), i
			},
			reliableTrDimensions: function() {
				var e, t, n, r;
				return null == a && (e = E.createElement("table"), t = E.createElement("tr"), n = E.createElement("div"), e.style.cssText = "position:absolute;left:-11111px", t.style.height = "1px", n.style.height = "9px", re.appendChild(e).appendChild(t).appendChild(n), r = C.getComputedStyle(t), a = 3 < parseInt(r.height), re.removeChild(e)), a
			}
		}))
	}();
	var _e = ["Webkit", "Moz", "ms"],
		ze = E.createElement("div").style,
		Ue = {};

	function Xe(e) {
		var t = S.cssProps[e] || Ue[e];
		return t || (e in ze ? e : Ue[e] = function(e) {
			var t = e[0].toUpperCase() + e.slice(1),
				n = _e.length;
			while(n--)
				if((e = _e[n] + t) in ze) return e
		}(e) || e)
	}
	var Ve = /^(none|table(?!-c[ea]).+)/,
		Ge = /^--/,
		Ye = {
			position: "absolute",
			visibility: "hidden",
			display: "block"
		},
		Qe = {
			letterSpacing: "0",
			fontWeight: "400"
		};

	function Je(e, t, n) {
		var r = te.exec(t);
		return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t
	}

	function Ke(e, t, n, r, i, o) {
		var a = "width" === t ? 1 : 0,
			s = 0,
			u = 0;
		if(n === (r ? "border" : "content")) return 0;
		for(; a < 4; a += 2) "margin" === n && (u += S.css(e, n + ne[a], !0, i)), r ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), "margin" !== n && (u -= S.css(e, "border" + ne[a] + "Width", !0, i))) : (u += S.css(e, "padding" + ne[a], !0, i), "padding" !== n ? u += S.css(e, "border" + ne[a] + "Width", !0, i) : s += S.css(e, "border" + ne[a] + "Width", !0, i));
		return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u
	}

	function Ze(e, t, n) {
		var r = Ie(e),
			i = (!y.boxSizingReliable() || n) && "border-box" === S.css(e, "boxSizing", !1, r),
			o = i,
			a = Be(e, t, r),
			s = "offset" + t[0].toUpperCase() + t.slice(1);
		if(Me.test(a)) {
			if(!n) return a;
			a = "auto"
		}
		return(!y.boxSizingReliable() && i || !y.reliableTrDimensions() && A(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === S.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === S.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + Ke(e, t, n || (i ? "border" : "content"), o, r, a) + "px"
	}

	function et(e, t, n, r, i) {
		return new et.prototype.init(e, t, n, r, i)
	}
	S.extend({
		cssHooks: {
			opacity: {
				get: function(e, t) {
					if(t) {
						var n = Be(e, "opacity");
						return "" === n ? "1" : n
					}
				}
			}
		},
		cssNumber: {
			animationIterationCount: !0,
			columnCount: !0,
			fillOpacity: !0,
			flexGrow: !0,
			flexShrink: !0,
			fontWeight: !0,
			gridArea: !0,
			gridColumn: !0,
			gridColumnEnd: !0,
			gridColumnStart: !0,
			gridRow: !0,
			gridRowEnd: !0,
			gridRowStart: !0,
			lineHeight: !0,
			opacity: !0,
			order: !0,
			orphans: !0,
			widows: !0,
			zIndex: !0,
			zoom: !0
		},
		cssProps: {},
		style: function(e, t, n, r) {
			if(e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
				var i, o, a, s = X(t),
					u = Ge.test(t),
					l = e.style;
				if(u || (t = Xe(s)), a = S.cssHooks[t] || S.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];
				"string" === (o = typeof n) && (i = te.exec(n)) && i[1] && (n = se(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (S.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n))
			}
		},
		css: function(e, t, n, r) {
			var i, o, a, s = X(t);
			return Ge.test(t) || (t = Xe(s)), (a = S.cssHooks[t] || S.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = Be(e, t, r)), "normal" === i && t in Qe && (i = Qe[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i
		}
	}), S.each(["height", "width"], function(e, u) {
		S.cssHooks[u] = {
			get: function(e, t, n) {
				if(t) return !Ve.test(S.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? Ze(e, u, n) : We(e, Ye, function() {
					return Ze(e, u, n)
				})
			},
			set: function(e, t, n) {
				var r, i = Ie(e),
					o = !y.scrollboxSize() && "absolute" === i.position,
					a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i),
					s = n ? Ke(e, u, n, a, i) : 0;
				return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - Ke(e, u, "border", !1, i) - .5)), s && (r = te.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = S.css(e, u)), Je(0, t, s)
			}
		}
	}), S.cssHooks.marginLeft = $e(y.reliableMarginLeft, function(e, t) {
		if(t) return(parseFloat(Be(e, "marginLeft")) || e.getBoundingClientRect().left - We(e, {
			marginLeft: 0
		}, function() {
			return e.getBoundingClientRect().left
		})) + "px"
	}), S.each({
		margin: "",
		padding: "",
		border: "Width"
	}, function(i, o) {
		S.cssHooks[i + o] = {
			expand: function(e) {
				for(var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[i + ne[t] + o] = r[t] || r[t - 2] || r[0];
				return n
			}
		}, "margin" !== i && (S.cssHooks[i + o].set = Je)
	}), S.fn.extend({
		css: function(e, t) {
			return $(this, function(e, t, n) {
				var r, i, o = {},
					a = 0;
				if(Array.isArray(t)) {
					for(r = Ie(e), i = t.length; a < i; a++) o[t[a]] = S.css(e, t[a], !1, r);
					return o
				}
				return void 0 !== n ? S.style(e, t, n) : S.css(e, t)
			}, e, t, 1 < arguments.length)
		}
	}), ((S.Tween = et).prototype = {
		constructor: et,
		init: function(e, t, n, r, i, o) {
			this.elem = e, this.prop = n, this.easing = i || S.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (S.cssNumber[n] ? "" : "px")
		},
		cur: function() {
			var e = et.propHooks[this.prop];
			return e && e.get ? e.get(this) : et.propHooks._default.get(this)
		},
		run: function(e) {
			var t, n = et.propHooks[this.prop];
			return this.options.duration ? this.pos = t = S.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : et.propHooks._default.set(this), this
		}
	}).init.prototype = et.prototype, (et.propHooks = {
		_default: {
			get: function(e) {
				var t;
				return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = S.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0
			},
			set: function(e) {
				S.fx.step[e.prop] ? S.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !S.cssHooks[e.prop] && null == e.elem.style[Xe(e.prop)] ? e.elem[e.prop] = e.now : S.style(e.elem, e.prop, e.now + e.unit)
			}
		}
	}).scrollTop = et.propHooks.scrollLeft = {
		set: function(e) {
			e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
		}
	}, S.easing = {
		linear: function(e) {
			return e
		},
		swing: function(e) {
			return .5 - Math.cos(e * Math.PI) / 2
		},
		_default: "swing"
	}, S.fx = et.prototype.init, S.fx.step = {};
	var tt, nt, rt, it, ot = /^(?:toggle|show|hide)$/,
		at = /queueHooks$/;

	function st() {
		nt && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(st) : C.setTimeout(st, S.fx.interval), S.fx.tick())
	}

	function ut() {
		return C.setTimeout(function() {
			tt = void 0
		}), tt = Date.now()
	}

	function lt(e, t) {
		var n, r = 0,
			i = {
				height: e
			};
		for(t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = ne[r])] = i["padding" + n] = e;
		return t && (i.opacity = i.width = e), i
	}

	function ct(e, t, n) {
		for(var r, i = (ft.tweeners[t] || []).concat(ft.tweeners["*"]), o = 0, a = i.length; o < a; o++)
			if(r = i[o].call(n, t, e)) return r
	}

	function ft(o, e, t) {
		var n, a, r = 0,
			i = ft.prefilters.length,
			s = S.Deferred().always(function() {
				delete u.elem
			}),
			u = function() {
				if(a) return !1;
				for(var e = tt || ut(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n);
				return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1)
			},
			l = s.promise({
				elem: o,
				props: S.extend({}, e),
				opts: S.extend(!0, {
					specialEasing: {},
					easing: S.easing._default
				}, t),
				originalProperties: e,
				originalOptions: t,
				startTime: tt || ut(),
				duration: t.duration,
				tweens: [],
				createTween: function(e, t) {
					var n = S.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);
					return l.tweens.push(n), n
				},
				stop: function(e) {
					var t = 0,
						n = e ? l.tweens.length : 0;
					if(a) return this;
					for(a = !0; t < n; t++) l.tweens[t].run(1);
					return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this
				}
			}),
			c = l.props;
		for(! function(e, t) {
				var n, r, i, o, a;
				for(n in e)
					if(i = t[r = X(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = S.cssHooks[r]) && "expand" in a)
						for(n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i);
					else t[r] = i
			}(c, l.opts.specialEasing); r < i; r++)
			if(n = ft.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;
		return S.map(c, ct, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), S.fx.timer(S.extend(u, {
			elem: o,
			anim: l,
			queue: l.opts.queue
		})), l
	}
	S.Animation = S.extend(ft, {
		tweeners: {
			"*": [function(e, t) {
				var n = this.createTween(e, t);
				return se(n.elem, e, te.exec(t), n), n
			}]
		},
		tweener: function(e, t) {
			m(e) ? (t = e, e = ["*"]) : e = e.match(P);
			for(var n, r = 0, i = e.length; r < i; r++) n = e[r], ft.tweeners[n] = ft.tweeners[n] || [], ft.tweeners[n].unshift(t)
		},
		prefilters: [function(e, t, n) {
			var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t,
				p = this,
				d = {},
				h = e.style,
				g = e.nodeType && ae(e),
				v = Y.get(e, "fxshow");
			for(r in n.queue || (null == (a = S._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function() {
					a.unqueued || s()
				}), a.unqueued++, p.always(function() {
					p.always(function() {
						a.unqueued--, S.queue(e, "fx").length || a.empty.fire()
					})
				})), t)
				if(i = t[r], ot.test(i)) {
					if(delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) {
						if("show" !== i || !v || void 0 === v[r]) continue;
						g = !0
					}
					d[r] = v && v[r] || S.style(e, r)
				}
			if((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d))
				for(r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Y.get(e, "display")), "none" === (c = S.css(e, "display")) && (l ? c = l : (le([e], !0), l = e.style.display || l, c = S.css(e, "display"), le([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === S.css(e, "float") && (u || (p.done(function() {
						h.display = l
					}), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function() {
						h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2]
					})), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Y.access(e, "fxshow", {
					display: l
				}), o && (v.hidden = !g), g && le([e], !0), p.done(function() {
					for(r in g || le([e]), Y.remove(e, "fxshow"), d) S.style(e, r, d[r])
				})), u = ct(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0))
		}],
		prefilter: function(e, t) {
			t ? ft.prefilters.unshift(e) : ft.prefilters.push(e)
		}
	}), S.speed = function(e, t, n) {
		var r = e && "object" == typeof e ? S.extend({}, e) : {
			complete: n || !n && t || m(e) && e,
			duration: e,
			easing: n && t || t && !m(t) && t
		};
		return S.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in S.fx.speeds ? r.duration = S.fx.speeds[r.duration] : r.duration = S.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function() {
			m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue)
		}, r
	}, S.fn.extend({
		fadeTo: function(e, t, n, r) {
			return this.filter(ae).css("opacity", 0).show().end().animate({
				opacity: t
			}, e, n, r)
		},
		animate: function(t, e, n, r) {
			var i = S.isEmptyObject(t),
				o = S.speed(e, n, r),
				a = function() {
					var e = ft(this, S.extend({}, t), o);
					(i || Y.get(this, "finish")) && e.stop(!0)
				};
			return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
		},
		stop: function(i, e, o) {
			var a = function(e) {
				var t = e.stop;
				delete e.stop, t(o)
			};
			return "string" != typeof i && (o = e, e = i, i = void 0), e && this.queue(i || "fx", []), this.each(function() {
				var e = !0,
					t = null != i && i + "queueHooks",
					n = S.timers,
					r = Y.get(this);
				if(t) r[t] && r[t].stop && a(r[t]);
				else
					for(t in r) r[t] && r[t].stop && at.test(t) && a(r[t]);
				for(t = n.length; t--;) n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1));
				!e && o || S.dequeue(this, i)
			})
		},
		finish: function(a) {
			return !1 !== a && (a = a || "fx"), this.each(function() {
				var e, t = Y.get(this),
					n = t[a + "queue"],
					r = t[a + "queueHooks"],
					i = S.timers,
					o = n ? n.length : 0;
				for(t.finish = !0, S.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));
				for(e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this);
				delete t.finish
			})
		}
	}), S.each(["toggle", "show", "hide"], function(e, r) {
		var i = S.fn[r];
		S.fn[r] = function(e, t, n) {
			return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(lt(r, !0), e, t, n)
		}
	}), S.each({
		slideDown: lt("show"),
		slideUp: lt("hide"),
		slideToggle: lt("toggle"),
		fadeIn: {
			opacity: "show"
		},
		fadeOut: {
			opacity: "hide"
		},
		fadeToggle: {
			opacity: "toggle"
		}
	}, function(e, r) {
		S.fn[e] = function(e, t, n) {
			return this.animate(r, e, t, n)
		}
	}), S.timers = [], S.fx.tick = function() {
		var e, t = 0,
			n = S.timers;
		for(tt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1);
		n.length || S.fx.stop(), tt = void 0
	}, S.fx.timer = function(e) {
		S.timers.push(e), S.fx.start()
	}, S.fx.interval = 13, S.fx.start = function() {
		nt || (nt = !0, st())
	}, S.fx.stop = function() {
		nt = null
	}, S.fx.speeds = {
		slow: 600,
		fast: 200,
		_default: 400
	}, S.fn.delay = function(r, e) {
		return r = S.fx && S.fx.speeds[r] || r, e = e || "fx", this.queue(e, function(e, t) {
			var n = C.setTimeout(e, r);
			t.stop = function() {
				C.clearTimeout(n)
			}
		})
	}, rt = E.createElement("input"), it = E.createElement("select").appendChild(E.createElement("option")), rt.type = "checkbox", y.checkOn = "" !== rt.value, y.optSelected = it.selected, (rt = E.createElement("input")).value = "t", rt.type = "radio", y.radioValue = "t" === rt.value;
	var pt, dt = S.expr.attrHandle;
	S.fn.extend({
		attr: function(e, t) {
			return $(this, S.attr, e, t, 1 < arguments.length)
		},
		removeAttr: function(e) {
			return this.each(function() {
				S.removeAttr(this, e)
			})
		}
	}), S.extend({
		attr: function(e, t, n) {
			var r, i, o = e.nodeType;
			if(3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? S.prop(e, t, n) : (1 === o && S.isXMLDoc(e) || (i = S.attrHooks[t.toLowerCase()] || (S.expr.match.bool.test(t) ? pt : void 0)), void 0 !== n ? null === n ? void S.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = S.find.attr(e, t)) ? void 0 : r)
		},
		attrHooks: {
			type: {
				set: function(e, t) {
					if(!y.radioValue && "radio" === t && A(e, "input")) {
						var n = e.value;
						return e.setAttribute("type", t), n && (e.value = n), t
					}
				}
			}
		},
		removeAttr: function(e, t) {
			var n, r = 0,
				i = t && t.match(P);
			if(i && 1 === e.nodeType)
				while(n = i[r++]) e.removeAttribute(n)
		}
	}), pt = {
		set: function(e, t, n) {
			return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n
		}
	}, S.each(S.expr.match.bool.source.match(/\w+/g), function(e, t) {
		var a = dt[t] || S.find.attr;
		dt[t] = function(e, t, n) {
			var r, i, o = t.toLowerCase();
			return n || (i = dt[o], dt[o] = r, r = null != a(e, t, n) ? o : null, dt[o] = i), r
		}
	});
	var ht = /^(?:input|select|textarea|button)$/i,
		gt = /^(?:a|area)$/i;

	function vt(e) {
		return(e.match(P) || []).join(" ")
	}

	function yt(e) {
		return e.getAttribute && e.getAttribute("class") || ""
	}

	function mt(e) {
		return Array.isArray(e) ? e : "string" == typeof e && e.match(P) || []
	}
	S.fn.extend({
		prop: function(e, t) {
			return $(this, S.prop, e, t, 1 < arguments.length)
		},
		removeProp: function(e) {
			return this.each(function() {
				delete this[S.propFix[e] || e]
			})
		}
	}), S.extend({
		prop: function(e, t, n) {
			var r, i, o = e.nodeType;
			if(3 !== o && 8 !== o && 2 !== o) return 1 === o && S.isXMLDoc(e) || (t = S.propFix[t] || t, i = S.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t]
		},
		propHooks: {
			tabIndex: {
				get: function(e) {
					var t = S.find.attr(e, "tabindex");
					return t ? parseInt(t, 10) : ht.test(e.nodeName) || gt.test(e.nodeName) && e.href ? 0 : -1
				}
			}
		},
		propFix: {
			"for": "htmlFor",
			"class": "className"
		}
	}), y.optSelected || (S.propHooks.selected = {
		get: function(e) {
			var t = e.parentNode;
			return t && t.parentNode && t.parentNode.selectedIndex, null
		},
		set: function(e) {
			var t = e.parentNode;
			t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex)
		}
	}), S.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
		S.propFix[this.toLowerCase()] = this
	}), S.fn.extend({
		addClass: function(t) {
			var e, n, r, i, o, a, s, u = 0;
			if(m(t)) return this.each(function(e) {
				S(this).addClass(t.call(this, e, yt(this)))
			});
			if((e = mt(t)).length)
				while(n = this[u++])
					if(i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
						a = 0;
						while(o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " ");
						i !== (s = vt(r)) && n.setAttribute("class", s)
					}
			return this
		},
		removeClass: function(t) {
			var e, n, r, i, o, a, s, u = 0;
			if(m(t)) return this.each(function(e) {
				S(this).removeClass(t.call(this, e, yt(this)))
			});
			if(!arguments.length) return this.attr("class", "");
			if((e = mt(t)).length)
				while(n = this[u++])
					if(i = yt(n), r = 1 === n.nodeType && " " + vt(i) + " ") {
						a = 0;
						while(o = e[a++])
							while(-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " ");
						i !== (s = vt(r)) && n.setAttribute("class", s)
					}
			return this
		},
		toggleClass: function(i, t) {
			var o = typeof i,
				a = "string" === o || Array.isArray(i);
			return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function(e) {
				S(this).toggleClass(i.call(this, e, yt(this), t), t)
			}) : this.each(function() {
				var e, t, n, r;
				if(a) {
					t = 0, n = S(this), r = mt(i);
					while(e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e)
				} else void 0 !== i && "boolean" !== o || ((e = yt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || ""))
			})
		},
		hasClass: function(e) {
			var t, n, r = 0;
			t = " " + e + " ";
			while(n = this[r++])
				if(1 === n.nodeType && -1 < (" " + vt(yt(n)) + " ").indexOf(t)) return !0;
			return !1
		}
	});
	var xt = /\r/g;
	S.fn.extend({
		val: function(n) {
			var r, e, i, t = this[0];
			return arguments.length ? (i = m(n), this.each(function(e) {
				var t;
				1 === this.nodeType && (null == (t = i ? n.call(this, e, S(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = S.map(t, function(e) {
					return null == e ? "" : e + ""
				})), (r = S.valHooks[this.type] || S.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t))
			})) : t ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof(e = t.value) ? e.replace(xt, "") : null == e ? "" : e : void 0
		}
	}), S.extend({
		valHooks: {
			option: {
				get: function(e) {
					var t = S.find.attr(e, "value");
					return null != t ? t : vt(S.text(e))
				}
			},
			select: {
				get: function(e) {
					var t, n, r, i = e.options,
						o = e.selectedIndex,
						a = "select-one" === e.type,
						s = a ? null : [],
						u = a ? o + 1 : i.length;
					for(r = o < 0 ? u : a ? o : 0; r < u; r++)
						if(((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) {
							if(t = S(n).val(), a) return t;
							s.push(t)
						}
					return s
				},
				set: function(e, t) {
					var n, r, i = e.options,
						o = S.makeArray(t),
						a = i.length;
					while(a--)((r = i[a]).selected = -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0);
					return n || (e.selectedIndex = -1), o
				}
			}
		}
	}), S.each(["radio", "checkbox"], function() {
		S.valHooks[this] = {
			set: function(e, t) {
				if(Array.isArray(t)) return e.checked = -1 < S.inArray(S(e).val(), t)
			}
		}, y.checkOn || (S.valHooks[this].get = function(e) {
			return null === e.getAttribute("value") ? "on" : e.value
		})
	}), y.focusin = "onfocusin" in C;
	var bt = /^(?:focusinfocus|focusoutblur)$/,
		wt = function(e) {
			e.stopPropagation()
		};
	S.extend(S.event, {
		trigger: function(e, t, n, r) {
			var i, o, a, s, u, l, c, f, p = [n || E],
				d = v.call(e, "type") ? e.type : e,
				h = v.call(e, "namespace") ? e.namespace.split(".") : [];
			if(o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !bt.test(d + S.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[S.expando] ? e : new S.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : S.makeArray(t, [e]), c = S.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) {
				if(!r && !c.noBubble && !x(n)) {
					for(s = c.delegateType || d, bt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), a = o;
					a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C)
				}
				i = 0;
				while((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Y.get(o, "events") || Object.create(null))[e.type] && Y.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && V(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault());
				return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !V(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), S.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, wt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, wt), S.event.triggered = void 0, a && (n[u] = a)), e.result
			}
		},
		simulate: function(e, t, n) {
			var r = S.extend(new S.Event, n, {
				type: e,
				isSimulated: !0
			});
			S.event.trigger(r, null, t)
		}
	}), S.fn.extend({
		trigger: function(e, t) {
			return this.each(function() {
				S.event.trigger(e, t, this)
			})
		},
		triggerHandler: function(e, t) {
			var n = this[0];
			if(n) return S.event.trigger(e, t, n, !0)
		}
	}), y.focusin || S.each({
		focus: "focusin",
		blur: "focusout"
	}, function(n, r) {
		var i = function(e) {
			S.event.simulate(r, e.target, S.event.fix(e))
		};
		S.event.special[r] = {
			setup: function() {
				var e = this.ownerDocument || this.document || this,
					t = Y.access(e, r);
				t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1)
			},
			teardown: function() {
				var e = this.ownerDocument || this.document || this,
					t = Y.access(e, r) - 1;
				t ? Y.access(e, r, t) : (e.removeEventListener(n, i, !0), Y.remove(e, r))
			}
		}
	});
	var Tt = C.location,
		Ct = {
			guid: Date.now()
		},
		Et = /\?/;
	S.parseXML = function(e) {
		var t;
		if(!e || "string" != typeof e) return null;
		try {
			t = (new C.DOMParser).parseFromString(e, "text/xml")
		} catch(e) {
			t = void 0
		}
		return t && !t.getElementsByTagName("parsererror").length || S.error("Invalid XML: " + e), t
	};
	var St = /\[\]$/,
		kt = /\r?\n/g,
		At = /^(?:submit|button|image|reset|file)$/i,
		Nt = /^(?:input|select|textarea|keygen)/i;

	function Dt(n, e, r, i) {
		var t;
		if(Array.isArray(e)) S.each(e, function(e, t) {
			r || St.test(n) ? i(n, t) : Dt(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i)
		});
		else if(r || "object" !== w(e)) i(n, e);
		else
			for(t in e) Dt(n + "[" + t + "]", e[t], r, i)
	}
	S.param = function(e, t) {
		var n, r = [],
			i = function(e, t) {
				var n = m(t) ? t() : t;
				r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n)
			};
		if(null == e) return "";
		if(Array.isArray(e) || e.jquery && !S.isPlainObject(e)) S.each(e, function() {
			i(this.name, this.value)
		});
		else
			for(n in e) Dt(n, e[n], t, i);
		return r.join("&")
	}, S.fn.extend({
		serialize: function() {
			return S.param(this.serializeArray())
		},
		serializeArray: function() {
			return this.map(function() {
				var e = S.prop(this, "elements");
				return e ? S.makeArray(e) : this
			}).filter(function() {
				var e = this.type;
				return this.name && !S(this).is(":disabled") && Nt.test(this.nodeName) && !At.test(e) && (this.checked || !pe.test(e))
			}).map(function(e, t) {
				var n = S(this).val();
				return null == n ? null : Array.isArray(n) ? S.map(n, function(e) {
					return {
						name: t.name,
						value: e.replace(kt, "\r\n")
					}
				}) : {
					name: t.name,
					value: n.replace(kt, "\r\n")
				}
			}).get()
		}
	});
	var jt = /%20/g,
		qt = /#.*$/,
		Lt = /([?&])_=[^&]*/,
		Ht = /^(.*?):[ \t]*([^\r\n]*)$/gm,
		Ot = /^(?:GET|HEAD)$/,
		Pt = /^\/\//,
		Rt = {},
		Mt = {},
		It = "*/".concat("*"),
		Wt = E.createElement("a");

	function Ft(o) {
		return function(e, t) {
			"string" != typeof e && (t = e, e = "*");
			var n, r = 0,
				i = e.toLowerCase().match(P) || [];
			if(m(t))
				while(n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t)
		}
	}

	function Bt(t, i, o, a) {
		var s = {},
			u = t === Mt;

		function l(e) {
			var r;
			return s[e] = !0, S.each(t[e] || [], function(e, t) {
				var n = t(i, o, a);
				return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1)
			}), r
		}
		return l(i.dataTypes[0]) || !s["*"] && l("*")
	}

	function $t(e, t) {
		var n, r, i = S.ajaxSettings.flatOptions || {};
		for(n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
		return r && S.extend(!0, e, r), e
	}
	Wt.href = Tt.href, S.extend({
		active: 0,
		lastModified: {},
		etag: {},
		ajaxSettings: {
			url: Tt.href,
			type: "GET",
			isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),
			global: !0,
			processData: !0,
			async: !0,
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			accepts: {
				"*": It,
				text: "text/plain",
				html: "text/html",
				xml: "application/xml, text/xml",
				json: "application/json, text/javascript"
			},
			contents: {
				xml: /\bxml\b/,
				html: /\bhtml/,
				json: /\bjson\b/
			},
			responseFields: {
				xml: "responseXML",
				text: "responseText",
				json: "responseJSON"
			},
			converters: {
				"* text": String,
				"text html": !0,
				"text json": JSON.parse,
				"text xml": S.parseXML
			},
			flatOptions: {
				url: !0,
				context: !0
			}
		},
		ajaxSetup: function(e, t) {
			return t ? $t($t(e, S.ajaxSettings), t) : $t(S.ajaxSettings, e)
		},
		ajaxPrefilter: Ft(Rt),
		ajaxTransport: Ft(Mt),
		ajax: function(e, t) {
			"object" == typeof e && (t = e, e = void 0), t = t || {};
			var c, f, p, n, d, r, h, g, i, o, v = S.ajaxSetup({}, t),
				y = v.context || v,
				m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event,
				x = S.Deferred(),
				b = S.Callbacks("once memory"),
				w = v.statusCode || {},
				a = {},
				s = {},
				u = "canceled",
				T = {
					readyState: 0,
					getResponseHeader: function(e) {
						var t;
						if(h) {
							if(!n) {
								n = {};
								while(t = Ht.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2])
							}
							t = n[e.toLowerCase() + " "]
						}
						return null == t ? null : t.join(", ")
					},
					getAllResponseHeaders: function() {
						return h ? p : null
					},
					setRequestHeader: function(e, t) {
						return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this
					},
					overrideMimeType: function(e) {
						return null == h && (v.mimeType = e), this
					},
					statusCode: function(e) {
						var t;
						if(e)
							if(h) T.always(e[T.status]);
							else
								for(t in e) w[t] = [w[t], e[t]];
						return this
					},
					abort: function(e) {
						var t = e || u;
						return c && c.abort(t), l(0, t), this
					}
				};
			if(x.promise(T), v.url = ((e || v.url || Tt.href) + "").replace(Pt, Tt.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""], null == v.crossDomain) {
				r = E.createElement("a");
				try {
					r.href = v.url, r.href = r.href, v.crossDomain = Wt.protocol + "//" + Wt.host != r.protocol + "//" + r.host
				} catch(e) {
					v.crossDomain = !0
				}
			}
			if(v.data && v.processData && "string" != typeof v.data && (v.data = S.param(v.data, v.traditional)), Bt(Rt, v, t, T), h) return T;
			for(i in (g = S.event && v.global) && 0 == S.active++ && S.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Ot.test(v.type), f = v.url.replace(qt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(jt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (Et.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Lt, "$1"), o = (Et.test(f) ? "&" : "?") + "_=" + Ct.guid++ + o), v.url = f + o), v.ifModified && (S.lastModified[f] && T.setRequestHeader("If-Modified-Since", S.lastModified[f]), S.etag[f] && T.setRequestHeader("If-None-Match", S.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + It + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]);
			if(v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort();
			if(u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Bt(Mt, v, t, T)) {
				if(T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T;
				v.async && 0 < v.timeout && (d = C.setTimeout(function() {
					T.abort("timeout")
				}, v.timeout));
				try {
					h = !1, c.send(a, l)
				} catch(e) {
					if(h) throw e;
					l(-1, e)
				}
			} else l(-1, "No Transport");

			function l(e, t, n, r) {
				var i, o, a, s, u, l = t;
				h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function(e, t, n) {
					var r, i, o, a, s = e.contents,
						u = e.dataTypes;
					while("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
					if(r)
						for(i in s)
							if(s[i] && s[i].test(r)) {
								u.unshift(i);
								break
							}
					if(u[0] in n) o = u[0];
					else {
						for(i in n) {
							if(!u[0] || e.converters[i + " " + u[0]]) {
								o = i;
								break
							}
							a || (a = i)
						}
						o = o || a
					}
					if(o) return o !== u[0] && u.unshift(o), n[o]
				}(v, T, n)), !i && -1 < S.inArray("script", v.dataTypes) && (v.converters["text script"] = function() {}), s = function(e, t, n, r) {
					var i, o, a, s, u, l = {},
						c = e.dataTypes.slice();
					if(c[1])
						for(a in e.converters) l[a.toLowerCase()] = e.converters[a];
					o = c.shift();
					while(o)
						if(e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift())
							if("*" === o) o = u;
							else if("*" !== u && u !== o) {
						if(!(a = l[u + " " + o] || l["* " + o]))
							for(i in l)
								if((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
									!0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1]));
									break
								}
						if(!0 !== a)
							if(a && e["throws"]) t = a(t);
							else try {
								t = a(t)
							} catch(e) {
								return {
									state: "parsererror",
									error: a ? e : "No conversion from " + u + " to " + o
								}
							}
					}
					return {
						state: "success",
						data: t
					}
				}(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (S.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --S.active || S.event.trigger("ajaxStop")))
			}
			return T
		},
		getJSON: function(e, t, n) {
			return S.get(e, t, n, "json")
		},
		getScript: function(e, t) {
			return S.get(e, void 0, t, "script")
		}
	}), S.each(["get", "post"], function(e, i) {
		S[i] = function(e, t, n, r) {
			return m(t) && (r = r || n, n = t, t = void 0), S.ajax(S.extend({
				url: e,
				type: i,
				dataType: r,
				data: t,
				success: n
			}, S.isPlainObject(e) && e))
		}
	}), S.ajaxPrefilter(function(e) {
		var t;
		for(t in e.headers) "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "")
	}), S._evalUrl = function(e, t, n) {
		return S.ajax({
			url: e,
			type: "GET",
			dataType: "script",
			cache: !0,
			async: !1,
			global: !1,
			converters: {
				"text script": function() {}
			},
			dataFilter: function(e) {
				S.globalEval(e, t, n)
			}
		})
	}, S.fn.extend({
		wrapAll: function(e) {
			var t;
			return this[0] && (m(e) && (e = e.call(this[0])), t = S(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
				var e = this;
				while(e.firstElementChild) e = e.firstElementChild;
				return e
			}).append(this)), this
		},
		wrapInner: function(n) {
			return m(n) ? this.each(function(e) {
				S(this).wrapInner(n.call(this, e))
			}) : this.each(function() {
				var e = S(this),
					t = e.contents();
				t.length ? t.wrapAll(n) : e.append(n)
			})
		},
		wrap: function(t) {
			var n = m(t);
			return this.each(function(e) {
				S(this).wrapAll(n ? t.call(this, e) : t)
			})
		},
		unwrap: function(e) {
			return this.parent(e).not("body").each(function() {
				S(this).replaceWith(this.childNodes)
			}), this
		}
	}), S.expr.pseudos.hidden = function(e) {
		return !S.expr.pseudos.visible(e)
	}, S.expr.pseudos.visible = function(e) {
		return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length)
	}, S.ajaxSettings.xhr = function() {
		try {
			return new C.XMLHttpRequest
		} catch(e) {}
	};
	var _t = {
			0: 200,
			1223: 204
		},
		zt = S.ajaxSettings.xhr();
	y.cors = !!zt && "withCredentials" in zt, y.ajax = zt = !!zt, S.ajaxTransport(function(i) {
		var o, a;
		if(y.cors || zt && !i.crossDomain) return {
			send: function(e, t) {
				var n, r = i.xhr();
				if(r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields)
					for(n in i.xhrFields) r[n] = i.xhrFields[n];
				for(n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]);
				o = function(e) {
					return function() {
						o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(_t[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? {
							binary: r.response
						} : {
							text: r.responseText
						}, r.getAllResponseHeaders()))
					}
				}, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function() {
					4 === r.readyState && C.setTimeout(function() {
						o && a()
					})
				}, o = o("abort");
				try {
					r.send(i.hasContent && i.data || null)
				} catch(e) {
					if(o) throw e
				}
			},
			abort: function() {
				o && o()
			}
		}
	}), S.ajaxPrefilter(function(e) {
		e.crossDomain && (e.contents.script = !1)
	}), S.ajaxSetup({
		accepts: {
			script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /\b(?:java|ecma)script\b/
		},
		converters: {
			"text script": function(e) {
				return S.globalEval(e), e
			}
		}
	}), S.ajaxPrefilter("script", function(e) {
		void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET")
	}), S.ajaxTransport("script", function(n) {
		var r, i;
		if(n.crossDomain || n.scriptAttrs) return {
			send: function(e, t) {
				r = S("<script>").attr(n.scriptAttrs || {}).prop({
					charset: n.scriptCharset,
					src: n.url
				}).on("load error", i = function(e) {
					r.remove(), i = null, e && t("error" === e.type ? 404 : 200, e.type)
				}), E.head.appendChild(r[0])
			},
			abort: function() {
				i && i()
			}
		}
	});
	var Ut, Xt = [],
		Vt = /(=)\?(?=&|$)|\?\?/;
	S.ajaxSetup({
		jsonp: "callback",
		jsonpCallback: function() {
			var e = Xt.pop() || S.expando + "_" + Ct.guid++;
			return this[e] = !0, e
		}
	}), S.ajaxPrefilter("json jsonp", function(e, t, n) {
		var r, i, o, a = !1 !== e.jsonp && (Vt.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Vt.test(e.data) && "data");
		if(a || "jsonp" === e.dataTypes[0]) return r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Vt, "$1" + r) : !1 !== e.jsonp && (e.url += (Et.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function() {
			return o || S.error(r + " was not called"), o[0]
		}, e.dataTypes[0] = "json", i = C[r], C[r] = function() {
			o = arguments
		}, n.always(function() {
			void 0 === i ? S(C).removeProp(r) : C[r] = i, e[r] && (e.jsonpCallback = t.jsonpCallback, Xt.push(r)), o && m(i) && i(o[0]), o = i = void 0
		}), "script"
	}), y.createHTMLDocument = ((Ut = E.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === Ut.childNodes.length), S.parseHTML = function(e, t, n) {
		return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (y.createHTMLDocument ? ((r = (t = E.implementation.createHTMLDocument("")).createElement("base")).href = E.location.href, t.head.appendChild(r)) : t = E), o = !n && [], (i = N.exec(e)) ? [t.createElement(i[1])] : (i = xe([e], t, o), o && o.length && S(o).remove(), S.merge([], i.childNodes)));
		var r, i, o
	}, S.fn.load = function(e, t, n) {
		var r, i, o, a = this,
			s = e.indexOf(" ");
		return -1 < s && (r = vt(e.slice(s)), e = e.slice(0, s)), m(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"), 0 < a.length && S.ajax({
			url: e,
			type: i || "GET",
			dataType: "html",
			data: t
		}).done(function(e) {
			o = arguments, a.html(r ? S("<div>").append(S.parseHTML(e)).find(r) : e)
		}).always(n && function(e, t) {
			a.each(function() {
				n.apply(this, o || [e.responseText, t, e])
			})
		}), this
	}, S.expr.pseudos.animated = function(t) {
		return S.grep(S.timers, function(e) {
			return t === e.elem
		}).length
	}, S.offset = {
		setOffset: function(e, t, n) {
			var r, i, o, a, s, u, l = S.css(e, "position"),
				c = S(e),
				f = {};
			"static" === l && (e.style.position = "relative"), s = c.offset(), o = S.css(e, "top"), u = S.css(e, "left"), ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0), m(t) && (t = t.call(e, n, S.extend({}, s))), null != t.top && (f.top = t.top - s.top + a), null != t.left && (f.left = t.left - s.left + i), "using" in t ? t.using.call(e, f) : ("number" == typeof f.top && (f.top += "px"), "number" == typeof f.left && (f.left += "px"), c.css(f))
		}
	}, S.fn.extend({
		offset: function(t) {
			if(arguments.length) return void 0 === t ? this : this.each(function(e) {
				S.offset.setOffset(this, t, e)
			});
			var e, n, r = this[0];
			return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, {
				top: e.top + n.pageYOffset,
				left: e.left + n.pageXOffset
			}) : {
				top: 0,
				left: 0
			} : void 0
		},
		position: function() {
			if(this[0]) {
				var e, t, n, r = this[0],
					i = {
						top: 0,
						left: 0
					};
				if("fixed" === S.css(r, "position")) t = r.getBoundingClientRect();
				else {
					t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement;
					while(e && (e === n.body || e === n.documentElement) && "static" === S.css(e, "position")) e = e.parentNode;
					e && e !== r && 1 === e.nodeType && ((i = S(e).offset()).top += S.css(e, "borderTopWidth", !0), i.left += S.css(e, "borderLeftWidth", !0))
				}
				return {
					top: t.top - i.top - S.css(r, "marginTop", !0),
					left: t.left - i.left - S.css(r, "marginLeft", !0)
				}
			}
		},
		offsetParent: function() {
			return this.map(function() {
				var e = this.offsetParent;
				while(e && "static" === S.css(e, "position")) e = e.offsetParent;
				return e || re
			})
		}
	}), S.each({
		scrollLeft: "pageXOffset",
		scrollTop: "pageYOffset"
	}, function(t, i) {
		var o = "pageYOffset" === i;
		S.fn[t] = function(e) {
			return $(this, function(e, t, n) {
				var r;
				if(x(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n) return r ? r[i] : e[t];
				r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n
			}, t, e, arguments.length)
		}
	}), S.each(["top", "left"], function(e, n) {
		S.cssHooks[n] = $e(y.pixelPosition, function(e, t) {
			if(t) return t = Be(e, n), Me.test(t) ? S(e).position()[n] + "px" : t
		})
	}), S.each({
		Height: "height",
		Width: "width"
	}, function(a, s) {
		S.each({
			padding: "inner" + a,
			content: s,
			"": "outer" + a
		}, function(r, o) {
			S.fn[o] = function(e, t) {
				var n = arguments.length && (r || "boolean" != typeof e),
					i = r || (!0 === e || !0 === t ? "margin" : "border");
				return $(this, function(e, t, n) {
					var r;
					return x(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" + a], r["offset" + a], r["client" + a])) : void 0 === n ? S.css(e, t, i) : S.style(e, t, n, i)
				}, s, n ? e : void 0, n)
			}
		})
	}), S.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
		S.fn[t] = function(e) {
			return this.on(t, e)
		}
	}), S.fn.extend({
		bind: function(e, t, n) {
			return this.on(e, null, t, n)
		},
		unbind: function(e, t) {
			return this.off(e, null, t)
		},
		delegate: function(e, t, n, r) {
			return this.on(t, e, n, r)
		},
		undelegate: function(e, t, n) {
			return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
		},
		hover: function(e, t) {
			return this.mouseenter(e).mouseleave(t || e)
		}
	}), S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(e, n) {
		S.fn[n] = function(e, t) {
			return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n)
		}
	});
	var Gt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
	S.proxy = function(e, t) {
		var n, r, i;
		if("string" == typeof t && (n = e[t], t = e, e = n), m(e)) return r = s.call(arguments, 2), (i = function() {
			return e.apply(t || this, r.concat(s.call(arguments)))
		}).guid = e.guid = e.guid || S.guid++, i
	}, S.holdReady = function(e) {
		e ? S.readyWait++ : S.ready(!0)
	}, S.isArray = Array.isArray, S.parseJSON = JSON.parse, S.nodeName = A, S.isFunction = m, S.isWindow = x, S.camelCase = X, S.type = w, S.now = Date.now, S.isNumeric = function(e) {
		var t = S.type(e);
		return("number" === t || "string" === t) && !isNaN(e - parseFloat(e))
	}, S.trim = function(e) {
		return null == e ? "" : (e + "").replace(Gt, "")
	}, "function" == typeof define && define.amd && define("jquery", [], function() {
		return S
	});
	var Yt = C.jQuery,
		Qt = C.$;
	return S.noConflict = function(e) {
		return C.$ === S && (C.$ = Qt), e && C.jQuery === S && (C.jQuery = Yt), S
	}, "undefined" == typeof e && (C.jQuery = C.$ = S), S
});
/*! jQuery Migrate v1.4.1 | (c) jQuery Foundation and other contributors | jquery.org/license */
"undefined" == typeof jQuery.migrateMute && (jQuery.migrateMute = !0),
	function(a, b, c) {
		function d(c) {
			var d = b.console;
			f[c] || (f[c] = !0, a.migrateWarnings.push(c), d && d.warn && !a.migrateMute && (d.warn("JQMIGRATE: " + c), a.migrateTrace && d.trace && d.trace()))
		}

		function e(b, c, e, f) {
			if(Object.defineProperty) try {
				return void Object.defineProperty(b, c, {
					configurable: !0,
					enumerable: !0,
					get: function() {
						return d(f), e
					},
					set: function(a) {
						d(f), e = a
					}
				})
			} catch(g) {}
			a._definePropertyBroken = !0, b[c] = e
		}
		a.migrateVersion = "1.4.1";
		var f = {};
		a.migrateWarnings = [], b.console && b.console.log && b.console.log("JQMIGRATE: Migrate is installed" + (a.migrateMute ? "" : " with logging active") + ", version " + a.migrateVersion), a.migrateTrace === c && (a.migrateTrace = !0), a.migrateReset = function() {
			f = {}, a.migrateWarnings.length = 0
		}, "BackCompat" === document.compatMode && d("jQuery is not compatible with Quirks Mode");
		var g = a("<input/>", {
				size: 1
			}).attr("size") && a.attrFn,
			h = a.attr,
			i = a.attrHooks.value && a.attrHooks.value.get || function() {
				return null
			},
			j = a.attrHooks.value && a.attrHooks.value.set || function() {
				return c
			},
			k = /^(?:input|button)$/i,
			l = /^[238]$/,
			m = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
			n = /^(?:checked|selected)$/i;
		e(a, "attrFn", g || {}, "jQuery.attrFn is deprecated"), a.attr = function(b, e, f, i) {
			var j = e.toLowerCase(),
				o = b && b.nodeType;
			return i && (h.length < 4 && d("jQuery.fn.attr( props, pass ) is deprecated"), b && !l.test(o) && (g ? e in g : a.isFunction(a.fn[e]))) ? a(b)[e](f) : ("type" === e && f !== c && k.test(b.nodeName) && b.parentNode && d("Can't change the 'type' of an input or button in IE 6/7/8"), !a.attrHooks[j] && m.test(j) && (a.attrHooks[j] = {
				get: function(b, d) {
					var e, f = a.prop(b, d);
					return f === !0 || "boolean" != typeof f && (e = b.getAttributeNode(d)) && e.nodeValue !== !1 ? d.toLowerCase() : c
				},
				set: function(b, c, d) {
					var e;
					return c === !1 ? a.removeAttr(b, d) : (e = a.propFix[d] || d, e in b && (b[e] = !0), b.setAttribute(d, d.toLowerCase())), d
				}
			}, n.test(j) && d("jQuery.fn.attr('" + j + "') might use property instead of attribute")), h.call(a, b, e, f))
		}, a.attrHooks.value = {
			get: function(a, b) {
				var c = (a.nodeName || "").toLowerCase();
				return "button" === c ? i.apply(this, arguments) : ("input" !== c && "option" !== c && d("jQuery.fn.attr('value') no longer gets properties"), b in a ? a.value : null)
			},
			set: function(a, b) {
				var c = (a.nodeName || "").toLowerCase();
				return "button" === c ? j.apply(this, arguments) : ("input" !== c && "option" !== c && d("jQuery.fn.attr('value', val) no longer sets properties"), void(a.value = b))
			}
		};
		var o, p, q = a.fn.init,
			r = a.find,
			s = a.parseJSON,
			t = /^\s*</,
			u = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
			v = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,
			w = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
		a.fn.init = function(b, e, f) {
			var g, h;
			return b && "string" == typeof b && !a.isPlainObject(e) && (g = w.exec(a.trim(b))) && g[0] && (t.test(b) || d("$(html) HTML strings must start with '<' character"), g[3] && d("$(html) HTML text after last tag is ignored"), "#" === g[0].charAt(0) && (d("HTML string cannot start with a '#' character"), a.error("JQMIGRATE: Invalid selector string (XSS)")), e && e.context && e.context.nodeType && (e = e.context), a.parseHTML) ? q.call(this, a.parseHTML(g[2], e && e.ownerDocument || e || document, !0), e, f) : (h = q.apply(this, arguments), b && b.selector !== c ? (h.selector = b.selector, h.context = b.context) : (h.selector = "string" == typeof b ? b : "", b && (h.context = b.nodeType ? b : e || document)), h)
		}, a.fn.init.prototype = a.fn, a.find = function(a) {
			var b = Array.prototype.slice.call(arguments);
			if("string" == typeof a && u.test(a)) try {
				document.querySelector(a)
			} catch(c) {
				a = a.replace(v, function(a, b, c, d) {
					return "[" + b + c + '"' + d + '"]'
				});
				try {
					document.querySelector(a), d("Attribute selector with '#' must be quoted: " + b[0]), b[0] = a
				} catch(e) {
					d("Attribute selector with '#' was not fixed: " + b[0])
				}
			}
			return r.apply(this, b)
		};
		var x;
		for(x in r) Object.prototype.hasOwnProperty.call(r, x) && (a.find[x] = r[x]);
		a.parseJSON = function(a) {
			return a ? s.apply(this, arguments) : (d("jQuery.parseJSON requires a valid JSON string"), null)
		}, a.uaMatch = function(a) {
			a = a.toLowerCase();
			var b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a) || /(msie) ([\w.]+)/.exec(a) || a.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a) || [];
			return {
				browser: b[1] || "",
				version: b[2] || "0"
			}
		}, a.browser || (o = a.uaMatch(navigator.userAgent), p = {}, o.browser && (p[o.browser] = !0, p.version = o.version), p.chrome ? p.webkit = !0 : p.webkit && (p.safari = !0), a.browser = p), e(a, "browser", a.browser, "jQuery.browser is deprecated"), a.boxModel = a.support.boxModel = "CSS1Compat" === document.compatMode, e(a, "boxModel", a.boxModel, "jQuery.boxModel is deprecated"), e(a.support, "boxModel", a.support.boxModel, "jQuery.support.boxModel is deprecated"), a.sub = function() {
			function b(a, c) {
				return new b.fn.init(a, c)
			}
			a.extend(!0, b, this), b.superclass = this, b.fn = b.prototype = this(), b.fn.constructor = b, b.sub = this.sub, b.fn.init = function(d, e) {
				var f = a.fn.init.call(this, d, e, c);
				return f instanceof b ? f : b(f)
			}, b.fn.init.prototype = b.fn;
			var c = b(document);
			return d("jQuery.sub() is deprecated"), b
		}, a.fn.size = function() {
			return d("jQuery.fn.size() is deprecated; use the .length property"), this.length
		};
		var y = !1;
		a.swap && a.each(["height", "width", "reliableMarginRight"], function(b, c) {
			var d = a.cssHooks[c] && a.cssHooks[c].get;
			d && (a.cssHooks[c].get = function() {
				var a;
				return y = !0, a = d.apply(this, arguments), y = !1, a
			})
		}), a.swap = function(a, b, c, e) {
			var f, g, h = {};
			y || d("jQuery.swap() is undocumented and deprecated");
			for(g in b) h[g] = a.style[g], a.style[g] = b[g];
			f = c.apply(a, e || []);
			for(g in b) a.style[g] = h[g];
			return f
		}, a.ajaxSetup({
			converters: {
				"text json": a.parseJSON
			}
		});
		var z = a.fn.data;
		a.fn.data = function(b) {
			var e, f, g = this[0];
			return !g || "events" !== b || 1 !== arguments.length || (e = a.data(g, b), f = a._data(g, b), e !== c && e !== f || f === c) ? z.apply(this, arguments) : (d("Use of jQuery.fn.data('events') is deprecated"), f)
		};
		var A = /\/(java|ecma)script/i;
		a.clean || (a.clean = function(b, c, e, f) {
			c = c || document, c = !c.nodeType && c[0] || c, c = c.ownerDocument || c, d("jQuery.clean() is deprecated");
			var g, h, i, j, k = [];
			if(a.merge(k, a.buildFragment(b, c).childNodes), e)
				for(i = function(a) {
						return !a.type || A.test(a.type) ? f ? f.push(a.parentNode ? a.parentNode.removeChild(a) : a) : e.appendChild(a) : void 0
					}, g = 0; null != (h = k[g]); g++) a.nodeName(h, "script") && i(h) || (e.appendChild(h), "undefined" != typeof h.getElementsByTagName && (j = a.grep(a.merge([], h.getElementsByTagName("script")), i), k.splice.apply(k, [g + 1, 0].concat(j)), g += j.length));
			return k
		});
		var B = a.event.add,
			C = a.event.remove,
			D = a.event.trigger,
			E = a.fn.toggle,
			F = a.fn.live,
			G = a.fn.die,
			H = a.fn.load,
			I = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
			J = new RegExp("\\b(?:" + I + ")\\b"),
			K = /(?:^|\s)hover(\.\S+|)\b/,
			L = function(b) {
				return "string" != typeof b || a.event.special.hover ? b : (K.test(b) && d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"), b && b.replace(K, "mouseenter$1 mouseleave$1"))
			};
		a.event.props && "attrChange" !== a.event.props[0] && a.event.props.unshift("attrChange", "attrName", "relatedNode", "srcElement"), a.event.dispatch && e(a.event, "handle", a.event.dispatch, "jQuery.event.handle is undocumented and deprecated"), a.event.add = function(a, b, c, e, f) {
			a !== document && J.test(b) && d("AJAX events should be attached to document: " + b), B.call(this, a, L(b || ""), c, e, f)
		}, a.event.remove = function(a, b, c, d, e) {
			C.call(this, a, L(b) || "", c, d, e)
		}, a.each(["load", "unload", "error"], function(b, c) {
			a.fn[c] = function() {
				var a = Array.prototype.slice.call(arguments, 0);
				return "load" === c && "string" == typeof a[0] ? H.apply(this, a) : (d("jQuery.fn." + c + "() is deprecated"), a.splice(0, 0, c), arguments.length ? this.bind.apply(this, a) : (this.triggerHandler.apply(this, a), this))
			}
		}), a.fn.toggle = function(b, c) {
			if(!a.isFunction(b) || !a.isFunction(c)) return E.apply(this, arguments);
			d("jQuery.fn.toggle(handler, handler...) is deprecated");
			var e = arguments,
				f = b.guid || a.guid++,
				g = 0,
				h = function(c) {
					var d = (a._data(this, "lastToggle" + b.guid) || 0) % g;
					return a._data(this, "lastToggle" + b.guid, d + 1), c.preventDefault(), e[d].apply(this, arguments) || !1
				};
			for(h.guid = f; g < e.length;) e[g++].guid = f;
			return this.click(h)
		}, a.fn.live = function(b, c, e) {
			return d("jQuery.fn.live() is deprecated"), F ? F.apply(this, arguments) : (a(this.context).on(b, this.selector, c, e), this)
		}, a.fn.die = function(b, c) {
			return d("jQuery.fn.die() is deprecated"), G ? G.apply(this, arguments) : (a(this.context).off(b, this.selector || "**", c), this)
		}, a.event.trigger = function(a, b, c, e) {
			return c || J.test(a) || d("Global events are undocumented and deprecated"), D.call(this, a, b, c || document, e)
		}, a.each(I.split("|"), function(b, c) {
			a.event.special[c] = {
				setup: function() {
					var b = this;
					return b !== document && (a.event.add(document, c + "." + a.guid, function() {
						a.event.trigger(c, Array.prototype.slice.call(arguments, 1), b, !0)
					}), a._data(this, c, a.guid++)), !1
				},
				teardown: function() {
					return this !== document && a.event.remove(document, c + "." + a._data(this, c)), !1
				}
			}
		}), a.event.special.ready = {
			setup: function() {
				this === document && d("'ready' event is deprecated")
			}
		};
		var M = a.fn.andSelf || a.fn.addBack,
			N = a.fn.find;
		if(a.fn.andSelf = function() {
				return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"), M.apply(this, arguments)
			}, a.fn.find = function(a) {
				var b = N.apply(this, arguments);
				return b.context = this.context, b.selector = this.selector ? this.selector + " " + a : a, b
			}, a.Callbacks) {
			var O = a.Deferred,
				P = [
					["resolve", "done", a.Callbacks("once memory"), a.Callbacks("once memory"), "resolved"],
					["reject", "fail", a.Callbacks("once memory"), a.Callbacks("once memory"), "rejected"],
					["notify", "progress", a.Callbacks("memory"), a.Callbacks("memory")]
				];
			a.Deferred = function(b) {
				var c = O(),
					e = c.promise();
				return c.pipe = e.pipe = function() {
					var b = arguments;
					return d("deferred.pipe() is deprecated"), a.Deferred(function(d) {
						a.each(P, function(f, g) {
							var h = a.isFunction(b[f]) && b[f];
							c[g[1]](function() {
								var b = h && h.apply(this, arguments);
								b && a.isFunction(b.promise) ? b.promise().done(d.resolve).fail(d.reject).progress(d.notify) : d[g[0] + "With"](this === e ? d.promise() : this, h ? [b] : arguments)
							})
						}), b = null
					}).promise()
				}, c.isResolved = function() {
					return d("deferred.isResolved is deprecated"), "resolved" === c.state()
				}, c.isRejected = function() {
					return d("deferred.isRejected is deprecated"), "rejected" === c.state()
				}, b && b.call(c, c), c
			}
		}
	}(jQuery, window); /*! jQuery Migrate v3.1.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
"undefined" == typeof jQuery.migrateMute && (jQuery.migrateMute = !0),
	function(t) {
		"function" == typeof define && define.amd ? define(["jquery"], function(e) {
			return t(e, window)
		}) : "object" == typeof module && module.exports ? module.exports = t(require("jquery"), window) : t(jQuery, window)
	}(function(s, n) {
		"use strict";

		function e(e) {
			return 0 <= function(e, t) {
				for(var r = /^(\d+)\.(\d+)\.(\d+)/, n = r.exec(e) || [], o = r.exec(t) || [], i = 1; i <= 3; i++) {
					if(+n[i] > +o[i]) return 1;
					if(+n[i] < +o[i]) return -1
				}
				return 0
			}(s.fn.jquery, e)
		}
		s.migrateVersion = "3.1.0", n.console && n.console.log && (s && e("3.0.0") || n.console.log("JQMIGRATE: jQuery 3.0.0+ REQUIRED"), s.migrateWarnings && n.console.log("JQMIGRATE: Migrate plugin loaded multiple times"), n.console.log("JQMIGRATE: Migrate is installed" + (s.migrateMute ? "" : " with logging active") + ", version " + s.migrateVersion));
		var r = {};

		function u(e) {
			var t = n.console;
			r[e] || (r[e] = !0, s.migrateWarnings.push(e), t && t.warn && !s.migrateMute && (t.warn("JQMIGRATE: " + e), s.migrateTrace && t.trace && t.trace()))
		}

		function t(e, t, r, n) {
			Object.defineProperty(e, t, {
				configurable: !0,
				enumerable: !0,
				get: function() {
					return u(n), r
				},
				set: function(e) {
					u(n), r = e
				}
			})
		}

		function o(e, t, r, n) {
			e[t] = function() {
				return u(n), r.apply(this, arguments)
			}
		}
		s.migrateWarnings = [], void 0 === s.migrateTrace && (s.migrateTrace = !0), s.migrateReset = function() {
			r = {}, s.migrateWarnings.length = 0
		}, "BackCompat" === n.document.compatMode && u("jQuery is not compatible with Quirks Mode");
		var i, a = s.fn.init,
			c = s.isNumeric,
			d = s.find,
			l = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
			p = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;
		for(i in s.fn.init = function(e) {
				var t = Array.prototype.slice.call(arguments);
				return "string" == typeof e && "#" === e && (u("jQuery( '#' ) is not a valid selector"), t[0] = []), a.apply(this, t)
			}, s.fn.init.prototype = s.fn, s.find = function(t) {
				var r = Array.prototype.slice.call(arguments);
				if("string" == typeof t && l.test(t)) try {
					n.document.querySelector(t)
				} catch(e) {
					t = t.replace(p, function(e, t, r, n) {
						return "[" + t + r + '"' + n + '"]'
					});
					try {
						n.document.querySelector(t), u("Attribute selector with '#' must be quoted: " + r[0]), r[0] = t
					} catch(e) {
						u("Attribute selector with '#' was not fixed: " + r[0])
					}
				}
				return d.apply(this, r)
			}, d) Object.prototype.hasOwnProperty.call(d, i) && (s.find[i] = d[i]);
		s.fn.size = function() {
			return u("jQuery.fn.size() is deprecated and removed; use the .length property"), this.length
		}, s.parseJSON = function() {
			return u("jQuery.parseJSON is deprecated; use JSON.parse"), JSON.parse.apply(null, arguments)
		}, s.isNumeric = function(e) {
			var t, r, n = c(e),
				o = (r = (t = e) && t.toString(), !s.isArray(t) && 0 <= r - parseFloat(r) + 1);
			return n !== o && u("jQuery.isNumeric() should not be called on constructed objects"), o
		}, e("3.3.0") && o(s, "isWindow", function(e) {
			return null != e && e === e.window
		}, "jQuery.isWindow() is deprecated"), o(s, "holdReady", s.holdReady, "jQuery.holdReady is deprecated"), o(s, "unique", s.uniqueSort, "jQuery.unique is deprecated; use jQuery.uniqueSort"), t(s.expr, "filters", s.expr.pseudos, "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"), t(s.expr, ":", s.expr.pseudos, "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"), e("3.2.0") && o(s, "nodeName", s.nodeName, "jQuery.nodeName is deprecated");
		var f = s.ajax;
		s.ajax = function() {
			var e = f.apply(this, arguments);
			return e.promise && (o(e, "success", e.done, "jQXHR.success is deprecated and removed"), o(e, "error", e.fail, "jQXHR.error is deprecated and removed"), o(e, "complete", e.always, "jQXHR.complete is deprecated and removed")), e
		};
		var y = s.fn.removeAttr,
			m = s.fn.toggleClass,
			h = /\S+/g;
		s.fn.removeAttr = function(e) {
			var r = this;
			return s.each(e.match(h), function(e, t) {
				s.expr.match.bool.test(t) && (u("jQuery.fn.removeAttr no longer sets boolean properties: " + t), r.prop(t, !1))
			}), y.apply(this, arguments)
		};
		var g = !(s.fn.toggleClass = function(t) {
			return void 0 !== t && "boolean" != typeof t ? m.apply(this, arguments) : (u("jQuery.fn.toggleClass( boolean ) is deprecated"), this.each(function() {
				var e = this.getAttribute && this.getAttribute("class") || "";
				e && s.data(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === t ? "" : s.data(this, "__className__") || "")
			}))
		});
		s.swap && s.each(["height", "width", "reliableMarginRight"], function(e, t) {
			var r = s.cssHooks[t] && s.cssHooks[t].get;
			r && (s.cssHooks[t].get = function() {
				var e;
				return g = !0, e = r.apply(this, arguments), g = !1, e
			})
		}), s.swap = function(e, t, r, n) {
			var o, i, a = {};
			for(i in g || u("jQuery.swap() is undocumented and deprecated"), t) a[i] = e.style[i], e.style[i] = t[i];
			for(i in o = r.apply(e, n || []), t) e.style[i] = a[i];
			return o
		};
		var v = s.data;
		s.data = function(e, t, r) {
			var n;
			if(t && "object" == typeof t && 2 === arguments.length) {
				n = s.hasData(e) && v.call(this, e);
				var o = {};
				for(var i in t) i !== s.camelCase(i) ? (u("jQuery.data() always sets/gets camelCased names: " + i), n[i] = t[i]) : o[i] = t[i];
				return v.call(this, e, o), t
			}
			return t && "string" == typeof t && t !== s.camelCase(t) && (n = s.hasData(e) && v.call(this, e)) && t in n ? (u("jQuery.data() always sets/gets camelCased names: " + t), 2 < arguments.length && (n[t] = r), n[t]) : v.apply(this, arguments)
		};

		function j(e) {
			return e
		}
		var Q = s.Tween.prototype.run;
		s.Tween.prototype.run = function() {
			1 < s.easing[this.easing].length && (u("'jQuery.easing." + this.easing.toString() + "' should use only one argument"), s.easing[this.easing] = j), Q.apply(this, arguments)
		};
		var w = s.fx.interval || 13,
			b = "jQuery.fx.interval is deprecated";
		n.requestAnimationFrame && Object.defineProperty(s.fx, "interval", {
			configurable: !0,
			enumerable: !0,
			get: function() {
				return n.document.hidden || u(b), w
			},
			set: function(e) {
				u(b), w = e
			}
		});
		var x = s.fn.load,
			k = s.event.add,
			A = s.event.fix;
		s.event.props = [], s.event.fixHooks = {}, t(s.event.props, "concat", s.event.props.concat, "jQuery.event.props.concat() is deprecated and removed"), s.event.fix = function(e) {
			var t, r = e.type,
				n = this.fixHooks[r],
				o = s.event.props;
			if(o.length) {
				u("jQuery.event.props are deprecated and removed: " + o.join());
				while(o.length) s.event.addProp(o.pop())
			}
			if(n && !n._migrated_ && (n._migrated_ = !0, u("jQuery.event.fixHooks are deprecated and removed: " + r), (o = n.props) && o.length))
				while(o.length) s.event.addProp(o.pop());
			return t = A.call(this, e), n && n.filter ? n.filter(t, e) : t
		}, s.event.add = function(e, t) {
			return e === n && "load" === t && "complete" === n.document.readyState && u("jQuery(window).on('load'...) called after load event occurred"), k.apply(this, arguments)
		}, s.each(["load", "unload", "error"], function(e, t) {
			s.fn[t] = function() {
				var e = Array.prototype.slice.call(arguments, 0);
				return "load" === t && "string" == typeof e[0] ? x.apply(this, e) : (u("jQuery.fn." + t + "() is deprecated"), e.splice(0, 0, t), arguments.length ? this.on.apply(this, e) : (this.triggerHandler.apply(this, e), this))
			}
		}), s.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(e, r) {
			s.fn[r] = function(e, t) {
				return u("jQuery.fn." + r + "() event shorthand is deprecated"), 0 < arguments.length ? this.on(r, null, e, t) : this.trigger(r)
			}
		}), s(function() {
			s(n.document).triggerHandler("ready")
		}), s.event.special.ready = {
			setup: function() {
				this === n.document && u("'ready' event is deprecated")
			}
		}, s.fn.extend({
			bind: function(e, t, r) {
				return u("jQuery.fn.bind() is deprecated"), this.on(e, null, t, r)
			},
			unbind: function(e, t) {
				return u("jQuery.fn.unbind() is deprecated"), this.off(e, null, t)
			},
			delegate: function(e, t, r, n) {
				return u("jQuery.fn.delegate() is deprecated"), this.on(t, e, r, n)
			},
			undelegate: function(e, t, r) {
				return u("jQuery.fn.undelegate() is deprecated"), 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", r)
			},
			hover: function(e, t) {
				return u("jQuery.fn.hover() is deprecated"), this.on("mouseenter", e).on("mouseleave", t || e)
			}
		});
		var S = s.fn.offset;
		s.fn.offset = function() {
			var e, t = this[0],
				r = {
					top: 0,
					left: 0
				};
			return t && t.nodeType ? (e = (t.ownerDocument || n.document).documentElement, s.contains(e, t) ? S.apply(this, arguments) : (u("jQuery.fn.offset() requires an element connected to a document"), r)) : (u("jQuery.fn.offset() requires a valid DOM element"), r)
		};
		var q = s.param;
		s.param = function(e, t) {
			var r = s.ajaxSettings && s.ajaxSettings.traditional;
			return void 0 === t && r && (u("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"), t = r), q.call(this, e, t)
		};
		var C = s.fn.andSelf || s.fn.addBack;
		s.fn.andSelf = function() {
			return u("jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"), C.apply(this, arguments)
		};
		var M = s.Deferred,
			R = [
				["resolve", "done", s.Callbacks("once memory"), s.Callbacks("once memory"), "resolved"],
				["reject", "fail", s.Callbacks("once memory"), s.Callbacks("once memory"), "rejected"],
				["notify", "progress", s.Callbacks("memory"), s.Callbacks("memory")]
			];
		return s.Deferred = function(e) {
			var i = M(),
				a = i.promise();
			return i.pipe = a.pipe = function() {
				var o = arguments;
				return u("deferred.pipe() is deprecated"), s.Deferred(function(n) {
					s.each(R, function(e, t) {
						var r = s.isFunction(o[e]) && o[e];
						i[t[1]](function() {
							var e = r && r.apply(this, arguments);
							e && s.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[t[0] + "With"](this === a ? n.promise() : this, r ? [e] : arguments)
						})
					}), o = null
				}).promise()
			}, e && e.call(i, i), i
		}, s.Deferred.exceptionHook = M.exceptionHook, s
	});
var XSS = {
	encode: function(txt) {
		return $("<span/>").text(txt).html()
	},
	decode: function(input) {
		if("string" === typeof input && input.indexOf("&") > -1) {
			var tmp = document.createElement("textarea");
			tmp.innerHTML = input;
			input = tmp.value
		}
		return input
	}
};
var htmlspecialchars = function(input) {
	if("string" === typeof input) {
		input = input.replaceAll("&", "&amp;");
		input = input.replaceAll("<", "&lt;");
		input = input.replaceAll(">", "&gt;");
		input = input.replaceAll('"', "&quot;");
		input = input.replaceAll("'", "&#x27;");
		input = input.replaceAll("\\(", "&#x28;");
		input = input.replaceAll("\\)", "&#x29;");
		input = input.replaceAll("\\[", "&#x5b;");
		input = input.replaceAll("\\]", "&#x5d;");
		input = input.replaceAll("\\{", "&#x7b;");
		input = input.replaceAll("\\}", "&#x7d;")
	}
	return input
};
var htmlspecialcharsOnce = function(input) {
	return htmlspecialchars(XSS.decode(input))
};
var encryptJSON = function(jsonObj) {
	if(typeof jsonObj === "object") {
		for(var key in jsonObj) {
			if(typeof jsonObj[key] === "object") {
				encryptJSON(jsonObj[key])
			} else if(typeof jsonObj[key] === "string" && !/^[\w\d\s\-\:\+]+$/.test(jsonObj[key])) {
				jsonObj[key] = htmlspecialchars(jsonObj[key])
			}
		}
	}
};
var mkAttr = function(data) {
	return encodeURIComponent(JSON.stringify(data))
};
var parseJSON = function(s) {
	try {
		var r = JSON.parse(s);
		if(r) return r;
		return false
	} catch(e) {
		return false
	}
};
jQuery(function() {
	ec.load("ec.XSSUtils")
});
var alertBox = function(txt, okCallback) {
	txt = htmlspecialcharsOnce(txt);
	new ec.box('<div class="box-errors-1" style="height: auto; margin-bottom: 20px;"><span>' + txt + "</span></div>", {
		boxid: "jb-calert",
		boxclass: "ol_box_4",
		width: 460,
		showCancel: false,
		onok: okCallback || null
	}).open()
};
var alertWithStatus = function(code) {
	if(405 == code) alertBox("å‚æ•°æ ¡éªŒæœªé€šè¿‡ï¼Œè¯·æ£€æŸ¥è¾“å…¥çš„æ•°æ®æ˜¯å¦å‡†ç¡®");
	else if(597 == code) alertBox("é¡µé¢å·²å¤±æ•ˆï¼Œè¯·æ‚¨åˆ·æ–°é¡µé¢åŽé‡æ–°æ“ä½œ");
	else return false;
	return true
};

function xhr(options) {
	options = $.extend({}, {
		url: "",
		method: "get",
		data: "",
		success: function() {},
		async: true,
		withCredentials: true
	}, options);
	var xhr = new XMLHttpRequest;
	xhr.open(options.method.toUpperCase(), options.url, options.async);
	xhr.withCredentials = options.withCredentials;
	xhr.onreadystatechange = function() {
		if(xhr.readyState === XMLHttpRequest.DONE) {
			var r = parseJSON(xhr.responseText || xhr.response || "");
			options.success(r)
		}
	};
	if("string" !== typeof options.data) options.data = $.param(options.data);
	xhr.send(options.data)
}
var csrfToken = {
	errTime: 0,
	get: function() {
		var token = ((" " + document.cookie).match(/[\s;]CSRF-TOKEN=([^;=]+)/) || [])[1];
		var time = Number(((" " + document.cookie).match(/[\s;]CSRF-TIME=([^;=]+)/) || [])[1] || 0);
		var now = (new Date).getTime();
		if(csrfToken.errTime < now - 3e5 && (!token || time < now - 118e4)) {
			csrfToken.errTime = now;
			xhr({
				url: "/system/queryStatus.json",
				async: false,
				success: function() {
					document.cookie = "CSRF-TIME=" + now + "; path=/";
					var newToken = ((" " + document.cookie).match(/[\s;]CSRF-TOKEN=([^;=]+)/) || [])[1];
					if(newToken) csrfToken.errTime = 0;
					if(newToken && newToken !== token) {
						token = newToken;
						csrfToken.setup(token)
					}
				}
			})
		}
		return token
	},
	setup: function(token) {
		token = token || csrfToken.get();
		$.ajaxSetup({
			headers: {
				CsrfToken: token
			}
		});
		$("form").each(function() {
			csrfToken.formSetup(this, token)
		})
	},
	formSetup: function(form, token) {
		if(($(form).attr("method") || "").toLowerCase() !== "get") {
			token = token || csrfToken.get();
			if($(form).find('input[name="CsrfToken"]').length < 1) {
				$(form).append('<input type="hidden" name="CsrfToken">')
			}
			$(form).find('input[name="CsrfToken"]').val(token)
		}
	}
};
$.support.cors = true;
$.ajaxSetup({
	headers: {
		CsrfToken: csrfToken.get()
	},
	xhrFields: {
		withCredentials: true
	},
	beforeSend: function(xhr) {
		csrfToken.setup();
		if("function" === typeof this.beforeSendFunction) {
			this.beforeSendFunction(xhr)
		}
	},
	statusCode: {
		200: function() {
			csrfToken.setup()
		},
		405: function() {
			if(!this.error) alertBox("å‚æ•°æ ¡éªŒæœªé€šè¿‡ï¼Œè¯·æ£€æŸ¥è¾“å…¥çš„æ•°æ®æ˜¯å¦å‡†ç¡®")
		},
		597: function() {
			if(!this.error) alertBox("é¡µé¢å·²å¤±æ•ˆï¼Œè¯·æ‚¨åˆ·æ–°é¡µé¢åŽé‡æ–°æ“ä½œ")
		}
	},
	dataFilter: function(data, type) {
		if("json" === type && "string" === typeof this.url) {
			var url = this.url.toLowerCase();
			if(url.startsWith("https://") || url.startsWith("http://") || url.startsWith("//")) {
				url = url.substring(url.indexOf("//") + 2) + "/";
				var ODList = [document.domain + "/", "www." + mallDomain + "/"];
				var trusted = false;
				for(var i = 0; i < ODList.length; i++) {
					if(url.startsWith(ODList[i])) {
						trusted = true;
						break
					}
				}
				if(!trusted) {
					try {
						data = JSON.parse(data);
						if(url.indexOf("/rms/comment/getcommentlist.json?") > -1 || url.indexOf("/rms/comment/getreplylist.json?") > -1 || url.indexOf("/rms/comment/getusercommentdetail.json?") > -1) {
							encryptJSON(data)
						} else {
							ec.encryptJSON(data)
						}
						data = JSON.stringify(data)
					} catch(err) {}
				}
			}
		}
		return data
	}
});
jQuery.fn.textS = function(value) {
	if("undefined" === typeof value) {
		return this.text()
	}
	return this.text(XSS.decode(value))
};
jQuery.fn.valS = function(value) {
	if("undefined" === typeof value) {
		return this.val()
	}
	return this.val(XSS.decode(value))
};
jQuery.fn.attrS = function(k, v) {
	if("string" === typeof v) {
		return this.attr(k, XSS.decode(v))
	}
	return this.attr(k, v)
};
$(function() {
	csrfToken.setup();
	$("form").on("submit", function() {
		csrfToken.formSetup(this)
	});
	document.cookie = "salePortal=1; domain=." + mallDomain + "; path=/"
});
window.ec || (window.ec = {});
ol.pkg = function(j, h, g) {
	var b, d, u;
	if(arguments.length == 3) {
		b = j;
		d = h;
		u = g
	} else {
		b = window;
		d = j;
		u = h
	}
	if(!d || !d.length) {
		return null
	}
	var m = d.split(".");
	for(var l = b, k = 0; k < m.length - 1; k++) {
		l[m[k]] || (l[m[k]] = {});
		l = l[m[k]]
	}
	l = l[m[m.length - 1]] = u || l[m[m.length - 1]] || {};
	return l
};
ol.define = function(k, g, d) {
	var h = window,
		b, n;
	if(arguments.length == 3) {
		h = k;
		b = g;
		n = d
	} else {
		b = k;
		n = g
	}
	var y = b.split("."),
		l, a;
	for(var m = h, j = 0; j < y.length - 1; j++) {
		m[y[j]] || (m[y[j]] = {});
		m = m[y[j]]
	}
	a = y[y.length - 1];
	l = m[a];
	if(!l) {
		l = m[a] = function() {
			var q = arguments.callee,
				p = q._define,
				c;
			for(var o = arguments.length, f = o + 10; o < f; o++) {
				c = p[a + "_" + o];
				if(c) {
					p[a + "_" + arguments.length] = p[a + "_" + o];
					break
				}
			}
			if(!c) {
				c = p[a + "_0"]
			}
			if(!c) {
				if(logger && logger.error) {
					logger.error(b, "function is undefined.")
				}
				return
			}
			c.apply(q, arguments)
		};
		l._define = {}
	}
	l._define[a + "_" + n.length] = n
};
ol.Cache = {
	_cache: {},
	_size: 0,
	set: function(b, a) {
		if(!ol.Cache.contains(b)) {
			ol.Cache._size++
		}
		ol.Cache._cache[b] = a;
		return a
	},
	get: function(b, c) {
		var d = ol.Cache;
		var a = d._cache[b];
		if(a) {
			return a
		}
		if(typeof c == "function") {
			a = c();
			d._cache[b] = a
		} else {
			if(c) {
				a = c;
				d._cache[b] = a
			} else {
				a = $(b);
				d._cache[b] = a
			}
		}
		d._size++;
		return a
	},
	remove: function(a) {
		ol.Cache._size--;
		ol.Cache._cache[a] = null
	},
	contains: function(a) {
		return ol.Cache._cache[a]
	}
};
ol.pkg("ol.ui");
(function() {
	var b = function() {
		var c = {};
		c.width = ol.ui.masker._bwidth;
		c.height = ol.ui.masker._bheight;
		ol.Cache.get("ec_mask").css(c)
	};
	var a = {
		css: {
			opacity: .2,
			background: "#000"
		}
	};
	ol.ui.masker = {
		isShown: false,
		mask: function(j) {
			var d = $;
			var c = ol.ui.masker;
			if(c.isShown) {
				return
			}
			j = d.extend(true, {}, a, j);
			var f = ol.Cache.get("ec_mask", function() {
				d(window).resize(function() {
					if(ol.ui.masker.isShown) {
						return
					}
					ol.Cache.get("ec_mask").css({
						width: c._bwidth(),
						height: c._bheight()
					})
				});
				return d("<div id='ec_mask' class='ec_mask'></div>").appendTo("body")
			});
			c.isShown = true;
			j.css.width = c._bwidth();
			j.css.height = c._bheight();
			j.css.visibility = "visible";
			f.css(j.css);
			d(window).bind("resize", b)
		},
		unmask: function() {
			ol.ui.masker.isShown = false;
			ol.Cache.get("ec_mask").css({
				visibility: "hidden",
				width: 0,
				height: 0
			});
			$(window).unbind("resize", b)
		},
		_bheight: function() {
			var c = $;
			if(c.browser.msie && c.browser.version < 7) {
				var g = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
				var d = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight);
				if(g < d) {
					return c(window).height()
				} else {
					return g
				}
			} else {
				return c(document).height()
			}
		},
		_bwidth: function() {
			var c = $;
			if(c.browser.msie && c.browser.version < 7) {
				var d = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
				var g = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
				if(d < g) {
					return c(window).width()
				} else {
					return d
				}
			} else {
				return c(document).width()
			}
		}
	}
})();
(function() {
	var a = {
		event: "hover",
		menu: null
	};
	ol.ui.dropdown = function(b, d) {
		var c = this;
		c.hideTimer = null;
		c._objItem;
		c._menuItem;
		c._onMenu = false;
		c._events = {};
		c._isShow = false;
		c._hideMenu = function() {
			c.hideTimer = setTimeout(c.hide, 100)
		};
		c.init = function() {
			var f = $;
			d = f.extend({}, a, d);
			if(d.event == "hover") {
				d.event = "mouseover"
			} else {
				d.event = "click"
			}
			c._objItem = f(b);
			c._menuItem = d.menu ? f(d.menu) : c._objItem.next();
			c._objItem.unbind(d.event).bind(d.event, function(g) {
				clearTimeout(c.hideTimer);
				c.show()
			});
			c._menuItem.find(".dropdown_item").bind("click", function() {
				setTimeout(c.hide)
			})
		};
		c.bind = function(f, j, g) {
			c._menuItem.find(f).bind(j, g)
		};
		c.show = function() {
			switch(d.event) {
				case "mouseover":
					c._objItem.unbind("mouseout").bind("mouseout", function(f) {
						c._hideMenu();
						c._objItem.addClass("hover")
					});
					c._menuItem.unbind("mouseover").bind("mouseover", function() {
						clearTimeout(c.hideTimer);
						c._menuItem.css("display", "block")
					}).unbind("mouseout").bind("mouseout", function() {
						c._hideMenu()
					});
					break;
				case "click":
					if(c._isShow) {
						c.hide();
						return
					} else {
						c._events.menu_click = function() {
							c._onMenu = true
						};
						c._events.document_click = function(f) {
							if(f.button != 0) {
								return true
							}
							if(c._onMenu === false) {
								c.hide()
							}
							c._onMenu = false
						};
						setTimeout(function() {
							c._menuItem.bind("click", c._events.menu_click);
							$(document).bind("click", c._events.document_click)
						}, 1)
					}
					break
			}
			c._objItem.addClass("hover");
			c._menuItem.css("display", "block");
			c._isShow = true
		};
		c.hide = function() {
			if(c._events.document_click) {
				$(document).unbind("click", c._events.document_click)
			}
			if(c._events.menu_click) {
				c._menuItem.unbind("click", c._events.menu_click)
			}
			c._objItem.removeClass("hover");
			c._menuItem.hide();
			c._isShow = false;
			c._onMenu = false
		};
		this.init()
	}
})();
ol.ui.scrollTo = function(p, g) {
	g = g || {
		offsetY: 45
	};
	if(typeof p != "object") {
		var d = p.toString().substr(0, 1);
		if(!(d == "#" || d == ".")) {
			p = "#" + p
		}
		p = $(p)
	}
	if(p.length == 0) {
		return
	}
	var b = p.offset().top;
	var a = document.documentElement && !/webkit/gi.test(navigator.userAgent) ? document.documentElement : document.body;
	var h = $(window).height();
	var f = a.scrollTop;
	if(!(f < b && b < f + h)) {
		a.scrollTop = b - g.offsetY
	}
};
(function() {
	var b = {
		white: {
			opacity: .55,
			background: "#fff"
		},
		black: {
			opacity: .2,
			background: "#000"
		}
	};
	var a = {
		selector: "#ec_ui_loading",
		css: null,
		modal: true,
		maskConfig: null
	};
	ol.ui.loading = {
		options: null,
		show: function(d) {
			var g = ol.ui.loading;
			if(typeof d == "string") {
				d = {
					maskConfig: {
						css: b[d]
					}
				}
			}
			g.options = $.extend(true, {}, a, d);
			if(g.options.modal) {
				ol.ui.masker.mask(g.options.maskConfig)
			}
			var h = $(g.options.selector);
			if(h.length == 0) {
				h = $('<div id="ec_ui_loading" class="ec_ui_loading"></div>').appendTo("body")
			}
			if(g.options.css) h.css(g.options.css);
			h.show();
			h = null;
			g = null
		},
		hide: function() {
			var c = ol.ui.loading.options;
			if(c) {
				if(c.modal) {
					ol.ui.masker.unmask()
				}
				$(c.selector).hide()
			}
		}
	}
})();
(function() {
	var a = {
		row: "tr",
		colors: ["#fff", "#f7f7f7"],
		hover: "#e3f3bf",
		index: 1,
		remain: 0,
		alterNum: 1
	};
	ol.ui.alternation = function(b, c) {
		var d = $;

		function j(h, g) {
			var f = this;
			this.container = d(h);
			this.data = {};
			this.rows = null;
			this.init = function() {
				this.rows = this.container.find(g.row);
				var p;
				var l;
				for(var k = 0; k < this.rows.length; k++) {
					p = this.rows[k];
					p.setAttribute("alternation", k);
					l = p.getAttribute("group");
					this.data[k] = {
						group: l,
						backgroundColor: ""
					}
				}
			};
			this.bindColor = function() {
				if(!g.colors) {
					return
				}
				var k = this.rows.length - g.remain;
				for(var m = g.index; m < k;) {
					for(var l = 0; l < g.colors.length && m < k; l++) {
						row = this.rows[m];
						row.style.backgroundColor = g.colors[l];
						this.data[m].backgroundColor = g.colors[l];
						m = m + g.alterNum
					}
				}
			};
			this.bindEvent = function() {
				this.rows.unbind("mouseover").bind("mouseover", function() {
					var o = d(this);
					var k = o.attr("alternation");
					var p = f.data[k];
					if(g.hover) {
						o.css("backgroundColor", g.hover)
					}
					if(p.group) {
						f.container.find(g.row + "[group=" + p.group + "]").addClass("hover")
					}
				}).unbind("mouseout").bind("mouseout", function() {
					var o = d(this);
					var k = o.attr("alternation");
					var p = f.data[k];
					if(g.hover) {
						o.css("backgroundColor", p.backgroundColor)
					}
					if(p.group) {
						f.container.find(g.row + "[group=" + p.group + "]").removeClass("hover")
					}
				})
			};
			this.init();
			this.bindColor();
			this.bindEvent()
		}
		c = d.extend({}, a, c);
		d(b).each(function() {
			new j(this, c)
		})
	}
})();
(function() {
	var a = function(u, k, h, g) {
		if(u.nodeType === 3) {
			var d = u.data.match(k);
			if(d) {
				var b = document.createElement(h || "span");
				b.className = g || "ec_ui_highlight highlight";
				var j = u.splitText(d.index);
				j.splitText(d[0].length);
				var f = j.cloneNode(true);
				b.appendChild(f);
				j.parentNode.replaceChild(b, j);
				return 1
			}
		} else {
			if(u.nodeType === 1 && u.childNodes && !/(script|style)/i.test(u.tagName) && !(u.tagName === h.toUpperCase() && u.className === g)) {
				for(var c = 0; c < u.childNodes.length; c++) {
					c += a(u.childNodes[c], k, h, g)
				}
			}
		}
		return 0
	};
	ol.ui.highlight = function(u, g, t) {
		var b = {
			className: null,
			element: "span",
			caseSensitive: false,
			wordsOnly: false
		};
		$.extend(b, t);
		if(g.constructor === String) {
			g = [g]
		}
		g = $.grep(g, function(l, k) {
			return l != ""
		});
		if(g.length == 0) {
			return this
		}
		var h = g.join("|");
		h = h.replace(/([\\\$\{\}\(\)\[\]\+\?\-\>\<\^\!\.\*])/g, "\\$1");
		var f = b.caseSensitive ? "" : "i";
		var d = "(" + h + ")";
		if(b.wordsOnly) {
			d = "\\b" + d + "\\b"
		}
		var j = new RegExp(d, f);
		var c = u;
		if(typeof u == "string") {
			c = ol.Cache.get(u)
		}
		return c.each(function() {
			a(this, j, b.element, b.className)
		})
	}
})();
(function() {
	var b = {
		_ec_ui_alert: {
			_default: {
				title: "ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê¾",
				zIndex: 399,
				showCancel: false,
				modal: false,
				draggable: false,
				focus: ".box-ok:first",
				width: 300,
				clickOut: function(d) {
					d.close()
				}
			}
		},
		_ec_ui_info: {},
		_ec_ui_warn: {},
		_ec_ui_error: {}
	};

	function a(l, d, h) {
		var g = ol.Cache.get;
		var f = g(d.boxid, function() {
			return new ol.box(null, d)
		});
		f.open(l);
		if(h.timeout) {
			if(b[d.boxid].timer) {
				clearTimeout(b[d.boxid].timer)
			}
			b[d.boxid].timer = setTimeout(function() {
				if(ol.isIE6) {
					f.close()
				} else {
					f.fadeOut(800)
				}
			}, h.timeout);
			g("#" + d.boxid).unbind("mouseover").bind("mouseover", function() {
				clearTimeout(b[d.boxid].timer)
			}).unbind("mouseout").bind("mouseout", function() {
				b[d.boxid].timer = setTimeout(function() {
					if(ol.isIE6) {
						f.close()
					} else {
						f.fadeOut(800)
					}
				}, h.timeout / 2)
			})
		}
	}
	var c = {
		title: "",
		zIndex: 399,
		showButton: false,
		modal: false,
		draggable: false,
		focus: ".box-close",
		width: 300
	};
	ol.ui.warn = function(d, f) {
		f = $.extend({}, c, f);
		f.boxid = "_ec_ui_warn";
		f.boxclass = "ec_ui_warn";
		var g = {
			timeout: f.timeout
		};
		delete f.timeout;
		a(d, f, g)
	};
	ol.ui.info = function(d, f) {
		f = $.extend({}, c, f);
		f.boxid = "_ec_ui_info";
		f.boxclass = "ec_ui_info";
		var g = {
			timeout: f.timeout
		};
		delete f.timeout;
		a(d, f, g)
	};
	ol.ui.error = function(d, f) {
		f = $.extend({}, c, f);
		f.boxid = "_ec_ui_error";
		f.boxclass = "ec_ui_error";
		var g = {
			timeout: f.timeout
		};
		delete f.timeout;
		a(d, f, g)
	};
	ol.ui.alert = function(d, f) {
		f = $.extend({}, b._ec_ui_alert._default, f);
		f.boxid = "_ec_ui_alert";
		f.boxclass = "ec_ui_alert";
		var g = ol.Cache.get(f.boxid, function() {
			return new ol.box(null, f)
		});
		g.setTitle(f.title);
		g.open(d)
	}
})();
(function() {
	var a = {
			style: "style1",
			offsetX: 0,
			offsetY: 0
		},
		b = '<div class="ec_ui_ballon"><div id="ballon_header"></div><div id="ballon_body"></div><div id="ballon_footer"></div></div>';
	ol.ui.ballon = function(h, d, g) {
		g = $.extend({}, a, g);
		var c = $(h);
		var f = $(b);
		var n;
		f.find("#ballon_body").html(d || "");
		c.mouseover(function() {
			n = setTimeout(function() {
				var m = g.offsetX || 0;
				var l = g.offsetY || 0;
				var k = c.offset().top + c.height();
				var j = c.offset().left;
				j = Math.max(j + m, 0);
				k = Math.max(k + l, 0);
				f.css({
					display: "block",
					top: k,
					left: j
				}).addClass(g.style);
				f.appendTo("body")
			}, 250)
		}).mouseout(function() {
			clearTimeout(n);
			f.remove()
		});
		return ol.ui
	}
})();
(function() {
	var a = {
		css: null,
		captureInput: false
	};
	ol.ui.hover = function(c, b) {
		var d = $;
		b = d.extend(true, {}, a, b);
		d(c).each(function() {
			var j = null;
			var p = false;
			var h = false;
			var g = d(this);
			var f = function() {
				if(p || h) {
					return
				}
				if(b.css) {
					j = g.attr("style");
					g.css(b.css)
				} else {
					g.addClass("hover")
				}
			};
			var o = function() {
				if(p || h) {
					return
				}
				if(b.css) {
					g.attr("style", j)
				} else {
					g.removeClass("hover")
				}
			};
			g.mouseover(function() {
				f();
				h = true
			}).mouseout(function() {
				h = false;
				o()
			});
			if(this.tagName == "INPUT" || this.tagName == "TEXTAREA") {
				g.focus(function() {
					f();
					p = true
				}).blur(function() {
					p = false;
					o()
				})
			} else {
				if(b.captureInput) {
					g.find("input[type=text],textarea").bind("focus", function() {
						f();
						p = true
					}).bind("blur", function() {
						p = false;
						o()
					})
				}
			}
		});
		return ol.ui
	}
})();
ol.pkg("ol.lang");
Array.prototype.clone = function() {
	return this.slice(0)
};
if(!String.prototype.startsWith) {
	Object.defineProperty(String.prototype, "startsWith", {
		value: function(d, c) {
			c = c || 0;
			return this.substring(!c || c < 0 ? 0 : +c, c + d.length) === d
		}
	})
}
if(!String.prototype.transHtmlAttribute) {
	String.prototype.transHtmlAttribute = function() {
		var a = this;
		var d = document.createElement("textarea");
		d.innerHTML = a;
		a = d.value;
		return a
	}
}
if(!String.prototype.trim) {
	String.prototype.trim = function() {
		return this.replace(/^\s+/, "").replace(/\s+$/, "")
	}
}
String.prototype.len = function() {
	return this.replace(/[^\x00-\xff]/g, "aa").length
};
String.prototype.replaceAll = function(b, a) {
	return this.replace(new RegExp(b, "gm"), a)
};
String.prototype.parseDate = function(n) {
	var b = {
		"\\.": {
			v: "\\."
		},
		"\\?": {
			v: "\\?"
		},
		"M+": {
			v: "(0[1-9]|1[0-2]|[1-9])",
			k: "MM"
		},
		"d+": {
			v: "(3[01]|[12][0-9]|0[1-9]|[1-9])",
			k: "dd"
		},
		"y+": {
			v: "(\\d{4})",
			k: "yyyy"
		},
		"H+": {
			v: "(2[0-3]|[01][0-9]|[0-9])",
			k: "HH"
		},
		"m+": {
			v: "([0-5][0-9]|[0-9])",
			k: "mm"
		},
		"s+": {
			v: "([0-5][0-9]|[0-9])",
			k: "ss"
		},
		S: {
			v: "(\\d+)",
			k: "S"
		}
	};
	var l = [];
	var c = n;
	var f;
	var h;
	for(var g in b) {
		if((f = n.search(new RegExp("(" + g + ")"))) != -1) {
			h = b[g];
			c = c.replace(RegExp.$1, h.v);
			if(h.k) {
				l.push({
					n: h.k,
					order: f
				})
			}
		}
	}
	l.sort(function(k, d) {
		return k.order - d.order
	});
	h = {};
	for(var m = 0; m < l.length; m++) {
		h[l[m].n] = m + 1
	}
	var a = document.createElement("textarea");
	a.innerHTML = this;
	var j = a.value;
	var C = j.match(new RegExp(c));
	if(!C) {
		throw "Invalid String for parse to Date!"
	}
	var y = new Date;
	if(h.yyyy) {
		y.setFullYear(C[h.yyyy])
	}
	if(h.dd) {
		var B = C[h.dd];
		y.setDate(B);
		y.setDate(B)
	} else {
		y.setDate(1);
		y.setDate(1)
	}
	if(h.MM) {
		y.setMonth(C[h.MM] - 1)
	}
	if(h.HH) {
		y.setHours(C[h.HH])
	} else {
		y.setHours(0)
	}
	if(h.mm) {
		y.setMinutes(C[h.mm])
	} else {
		y.setMinutes(0)
	}
	if(h.ss) {
		y.setSeconds(C[h.ss])
	} else {
		y.setSeconds(0)
	}
	if(h.S) {
		y.setMilliseconds(C[h.S])
	} else {
		y.setMilliseconds(0)
	}
	return y
};
Date.prototype.format = function(c) {
	var b = {
		"M+": this.getMonth() + 1,
		"d+": this.getDate(),
		"h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12,
		"H+": this.getHours(),
		"m+": this.getMinutes(),
		"s+": this.getSeconds(),
		"q+": Math.floor((this.getMonth() + 3) / 3),
		S: this.getMilliseconds()
	};
	var a = {
		0: "æ—¥",
		1: "ä¸€",
		2: "äºŒ",
		3: "ä¸‰",
		4: "å››",
		5: "äº”",
		6: "å…­"
	};
	if(/(y+)/.test(c)) {
		c = c.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))
	}
	if(/(E+)/.test(c)) {
		c = c.replace(RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "æ˜ŸæœŸ" : "å‘¨" : "") + a[this.getDay() + ""])
	}
	for(var d in b) {
		if(new RegExp("(" + d + ")").test(c)) {
			c = c.replace(RegExp.$1, RegExp.$1.length == 1 ? b[d] : ("00" + b[d]).substr(("" + b[d]).length))
		}
	}
	return c
};
if(!0 && window.JSON && window.JSON.parse && window.JSON.stringify) {
	ol.lang.json = function() {
		var a = /___$/;
		return {
			parse: function(c) {
				try {
					return window.JSON.parse(c)
				} catch(b) {
					return false
				}
			},
			stringify: function(c) {
				try {
					return window.JSON.stringify(c, function(d, g) {
						return !a.test(d) ? g : null
					})
				} catch(b) {
					return null
				}
			}
		}
	}()
} else {
	ol.lang.json = function() {
		function f(n) {
			return n < 10 ? "0" + n : n
		}
		Date.prototype.toJSON = function() {
			return [this.getUTCFullYear(), "-", f(this.getUTCMonth() + 1), "-", f(this.getUTCDate()), "T", f(this.getUTCHours()), ":", f(this.getUTCMinutes()), ":", f(this.getUTCSeconds()), "Z"].join("")
		};
		var m = {
			"\b": "\\b",
			"\t": "\\t",
			"\n": "\\n",
			"\f": "\\f",
			"\r": "\\r",
			'"': '\\"',
			"\\": "\\\\"
		};

		function stringify(value) {
			var a, i, k, l, r = /["\\\x00-\x1f\x7f-\x9f]/g,
				v;
			switch(typeof value) {
				case "string":
					return r.test(value) ? '"' + value.replace(r, function(a) {
						var c = m[a];
						if(c) {
							return c
						}
						c = a.charCodeAt();
						return "\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16)
					}) + '"' : '"' + value + '"';
				case "number":
					return isFinite(value) ? String(value) : "null";
				case "boolean":
				case "null":
					return String(value);
				case "object":
					if(!value) {
						return "null"
					}
					a = [];
					if(typeof value.length === "number" && !value.propertyIsEnumerable("length")) {
						l = value.length;
						for(i = 0; i < l; i += 1) {
							a.push(stringify(value[i]) || "null")
						}
						return "[" + a.join(",") + "]"
					}
					for(k in value) {
						if(k.match("___$")) {
							continue
						}
						if(value.hasOwnProperty(k)) {
							if(typeof k === "string") {
								v = stringify(value[k]);
								if(v) {
									a.push(stringify(k) + ":" + v)
								}
							}
						}
					}
					return "{" + a.join(",") + "}"
			}
		}
		return {
			stringify: stringify,
			parse: function(text) {
				if(/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/b-u]/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
					return eval("(" + text + ")")
				}
				return false
			}
		}
	}()
}
ol.pkg("ol.util");
ol.util.trim = function(a) {
	if(a == null) {
		return ""
	}
	if(typeof a != "string") {
		return a
	}
	return a.trim()
};
ol.util.left = function(c, a, b) {
	if(c.len() < a) {
		return c
	}
	var l = 0;
	for(var d = 0; d < c.length; d++) {
		if(c.charCodeAt(d) > 128) {
			l = l + 2
		} else {
			l = l + 1
		}
		if(l > a) {
			return c.substring(0, d) + (b ? b : "")
		}
	}
	return c
};
ol.util.isEmpty = function(a) {
	if(ol.util.trim(a) == "") {
		return true
	}
	return false
};
ol.util.isDate = function(a) {
	if(a == null || a == "") {
		return false
	}
	re = /\d{4}-{1}\d{2}-{1}\d{2}$/;
	return a.match(re)
};
ol.util.isNumeric = function(a) {
	strRef = "1234567890";
	if(a == "") {
		return false
	}
	for(i = 0; i < a.length; i++) {
		tempChar = a.substring(i, i + 1);
		if(strRef.indexOf(tempChar, 0) == -1) {
			return false
		}
	}
	return true
};
ol.util.isFloat = function(b) {
	var a = /^[0-9]+.?[0-9]*$/;
	return a.test(s)
};
ol.util.isEmail = function(c, d) {
	if(!c) {
		return false
	}
	var a = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/i;
	var b = new RegExp(a);
	var f;
	if(d) {
		f = c.split(d)
	} else {
		f = [c]
	}
	for(var n = 0; n < f.length; n++) {
		if(f[n].match(b) == null) {
			return false
		}
	}
	return true
};
ol.util.unescapeHtml = function(a) {
	if(typeof a !== "string") {
		return a
	}
	if(ol.util.isEmpty(a)) {
		return ""
	}
	var d = document.createElement("textarea");
	d.innerHTML = a;
	a = d.value;
	return a
};
ol.util.parseDate = function(j) {
	if("string" === typeof j) {
		j = j.trim();
		var g = document.createElement("textarea");
		g.innerHTML = j;
		j = g.value
	}
	var h = new Date(j);
	var a = null;
	if(isNaN(h.valueOf()) && "string" === typeof j) {
		if(/^\d{1,13}$/.test(j)) {
			h = new Date(parseInt(j))
		} else {
			if(a = /^(\d{4})-(\d{1,2})-(\d{1,2})[ T]{1}(\d{1,2}):(\d{1,2}):(\d{1,2})(\+\d{4})?$/.exec(j)) {
				h = new Date(parseInt(a[1]), parseInt(a[2]) - 1, parseInt(a[3]), parseInt(a[4]), parseInt(a[5]), parseInt(a[6]))
			}
		}
	}
	if(isNaN(h.valueOf())) {}
	return h
};
ol.util.isFunction = function(a) {
	if(!a) {
		return false
	}
	return Object.prototype.toString.call(a) === "[object Function]"
};
ol.util.isArray = function(a) {
	if(!a) {
		return false
	}
	return Object.prototype.toString.call(a) === "[object Array]"
};
ol.util.isObject = function(a) {
	if(!a) {
		return false
	}
	return Object.prototype.toString.call(a) === "[object Object]"
};
ol.util.cookie = {
	get: function(f) {
		var d = null;
		if(document.cookie && document.cookie != "") {
			var a = document.cookie.split(";");
			for(var b = 0; b < a.length; b++) {
				var c = (a[b] || "").replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g, "");
				if(c.substring(0, f.length + 1) == f + "=") {
					var n = function(g) {
						g = g.replace(/\+/g, " ");
						var j = '()<>@,;:\\"/[]?={}';
						for(var h = 0; h < j.length; h++) {
							if(g.indexOf(j.charAt(h)) != -1) {
								if(g.startsWith('"')) {
									g = g.substring(1)
								}
								if(g.endsWith('"')) {
									g = g.substring(0, g.length - 1)
								}
								break
							}
						}
						return decodeURIComponent(g)
					};
					d = n(c.substring(f.length + 1));
					break
				}
			}
		}
		return d
	},
	set: function(r, h, g) {
		g = g || {};
		if(h === null) {
			h = "";
			g.expires = -1
		}
		var d = "";
		if(g.expires && (typeof g.expires == "number" || g.expires.toUTCString)) {
			var f;
			if(typeof g.expires == "number") {
				f = new Date;
				f.setTime(f.getTime() + g.expires * 24 * 60 * 60 * 1e3)
			} else {
				f = g.expires
			}
			d = "; expires=" + f.toUTCString()
		}
		var c = "; path=" + (g.path || "/");
		var a = g.domain ? "; domain=" + g.domain : "";
		var b = g.secure ? "; secure" : "";
		document.cookie = [r, "=", encodeURIComponent(h), d, c, a, b].join("")
	},
	remove: function(a) {
		this.set(a, null)
	}
};
ol.pkg("ol.form.input");
(function() {
	var a = 0;
	ol.form.input.label = function(b, j, c) {
		if(!j) {
			throw "Please set label text!";
			return ol.form.input
		}
		var d = $;
		c = d.extend({}, ol.form.input.label.defaults, c);
		d(b).each(function() {
			var k = d(this),
				o = k.attr("id"),
				m = Number(k.css("z-index")) || 1,
				f = parseInt(k.css("margin-top"), 10) + parseInt(k.css("border-top-width"), 10),
				h = parseInt(k.css("margin-left"), 10) + parseInt(k.css("border-left-width"), 10),
				n = d('<label style="display:none;position:absolute;cursor:text;float:left;z-index:' + (m + 1) + '">' + j + "</label>").attr("class", k.attr("class")),
				l = d('<input style="border:none;background:transparent;cursor:text;margin:0;" value="' + j + '" tabindex=-1 readonly>');
			if("TEXTAREA" == k.prop("tagName")) {
				l.css("height", "auto")
			}
			if(!o && c.autoId) {
				o = "input_label_" + a++;
				k.attr("id", o)
			}
			var p = {
				color: c.color
			};
			n.attr("for", o).css(p);
			k.css("z-index", m).before(n);
			var g = k.parents("form");
			if(g.length > 0) {
				g.bind("reset", function() {
					setTimeout(function() {
						A()
					}, 150)
				})
			}
			var A = function() {
					if(k.attr("value").length == 0) {
						n.css("display", "block")
					}
				},
				q = function() {
					n.css("display", "none")
				};
			k.bind("blur", A).bind("focus", q);
			if(document.activeElement != k[0]) {
				A()
			}
		});
		return ol.form.input
	}
})();
ol.form.input.label.defaults = {
	color: "#999",
	autoId: true
};
(function() {
	var b = {
			max: Number.MAX_VALUE,
			exceedCallback: null
		},
		a = function(d) {
			var j = d.length,
				c = d.replace(/[^\x00-\xff]/g, "").length,
				f = (c % 2 == 0 ? c / 2 : parseInt(c / 2) + 1) + (j - c);
			return f
		};
	ol.form.input.wordCount = function(d, g) {
		var c = $;
		opt = c.extend({}, b, g);
		c(d).each(function(j) {
			if(typeof opt.callback == "function") {
				var f = a(this.value);
				opt.callback.call(this, f);
				if(f > opt.max && opt.exceedCallback) {
					opt.exceedCallback.call(this, f)
				}
			}
			c(this).bind("keyup", function() {
				var h = a(this.value);
				if(typeof opt.callback == "function") {
					opt.callback.call(this, h)
				}
				if(h > opt.max && opt.exceedCallback) {
					opt.exceedCallback.call(this, h)
				}
			})
		})
	}
})();
ol.pkg("ol.form.validator");
(function() {
	var d = function(m, l) {
			if(logger && logger.warn) {
				logger.warn(m, l)
			}
		},
		k = function(m, l) {
			if(logger && logger.error) {
				logger.error(m, l)
			}
		},
		g = {
			trim: true,
			validOnChange: false,
			allowEmpty: true,
			async: true,
			errorClass: null,
			successFunction: null,
			errorFunction: null
		};
	var x = {};
	var h = {};
	var j = function(q, t, m, n, r, l) {
		$.extend(l, m);
		if(n) {
			r = h[n];
			if(!r) {
				d(n + " rule is undefined!");
				return true
			}
		}
		var o;
		if(n) {
			l.type = n
		}
		if(r.length == 3) {
			o = r(q, t, l)
		} else {
			o = r(q, l)
		}
		if(!o) {
			if(l.errorFunction) {
				var p = function() {
					if(m.errorClass && t) {
						t.addClass(m.errorClass)
					}
					l.errorFunction(t || q, l)
				};
				if(m.async) {
					setTimeout(p, 1)
				} else {
					p()
				}
			}
			return false
		}
		return true
	};
	var a = function(q, r, n, l) {
		if(!n.type) {
			if(!j(q, r, n, null, n.rule, l)) {
				return false
			}
		} else {
			var o = n.type;
			if(typeof n.type == "string") {
				o = [n.type]
			}
			var p = {};
			for(var m = 0; m < o.length; m++) {
				if(!p[o[m]]) {
					if(!j(q, r, n, o[m], null, l)) {
						return false
					}
					p[o[m]] = 1
				}
			}
		}
		return true
	};
	var b = function(n) {
		var q = n.attr("validator");
		if(!q) {
			return true
		}
		var m = x[q];
		var w;
		switch(n.prop("tagName")) {
			case "SELECT":
				w = n.val();
				break;
			default:
				w = n[0].value
		}
		var t = {};
		var u = [];
		for(var o = 0; o < m.length; o++) {
			var r = {};
			if(m[o].trim) {
				w = $.trim(w)
			}
			if(!a(w, n, m[o], r)) {
				return false
			}
			u.push(r)
		}
		for(var o = 0; o < m.length; o++) {
			var v = m[o];
			if(v.successFunction) {
				var l = u[o];
				var p = function() {
					if(v.errorClass && n) {
						n.removeClass(v.errorClass)
					}
					v.successFunction(n || w, l)
				};
				if(v.async) {
					setTimeout(p, 1)
				} else {
					p()
				}
			}
		}
		return true
	};
	ol.form.validator = function(p, n) {
		if(typeof n == "object") {
			var q = {};
			if(a(p, null, n, q) && n.successFunction) {
				if(n.async) {
					setTimeout(function() {
						n.successFunction(p, q)
					}, 1)
				} else {
					n.successFunction(p, q)
				}
			}
			return
		}
		var m = p,
			o = n;
		var u = $(m);
		var v = u.prop("tagName");
		o = typeof o == "boolean" ? o : true;
		switch(v) {
			case "SELECT":
			case "INPUT":
			case "TEXTAREA":
				return b(u)
		}
		var t = u.find("select[validator],input[validator],textarea[validator]");
		var r = true;
		for(var l = 0; l < t.length; l++) {
			if(!b($(t[l]))) {
				if(o) {
					return false
				} else {
					r = false
				}
			}
		}
		return r
	};
	ol.form.validator.register = function(m, l) {
		h[m] = l
	};
	ol.form.validator.get = function(l) {
		return h[l]
	};
	var c = 0;
	ol.form.validator.bind = function(m, o) {
		var n = [];
		var r = $(m);
		o = $.extend({}, g, o);
		if(o.validOnChange) {
			r.on("change", function(t) {
				if(o.trimOnChange) {
					$(this).val(($(this).val() || "").trim())
				}
				ol.form.filter(this);
				ol.form.validator(this, true)
			})
		}
		for(var p = 0; p < r.length; p++) {
			var q = $(r[p]);
			var l = q.attr("validator");
			if(!l) {
				l = "validator" + ++c + (new Date).getTime();
				q.attr("validator", l)
			}
			if(!x[l]) {
				x[l] = []
			}
			x[l].push(o);
			n.push(l)
		}
		return n
	};
	ol.form.filter = function(n) {
		if($(n).attr("name") == "consignee" || $(n).attr("id") == "vatInvoice-consignee" || $(n).attr("id") == "contactBy") {
			var q = /[^a-zA-Z\u4E00-\u9FA5\uFF21-\uFF3A\uFF41-\uFF5A]/g;
			var l = $("#" + $(n).attr("name") + "-msg");
			if(q.test($(n).val())) {
				$(n).val(function() {
					return $(n).val().replace(q, "")
				});
				if(l.length) {
					l.addClass("report-errors filter  label-error").text("ä¸ºäº†æ›´å¥½çš„é€è¾¾ï¼Œå·²å¸®ä½ è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦")
				} else {
					$(n).next().addClass("report-errors   filter").text("ä¸ºäº†æ›´å¥½çš„é€è¾¾ï¼Œå·²å¸®ä½ è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦")
				}
			} else {
				if(l.length) {
					l.removeClass("filter report-errors icon-error label-error").innerText = ""
				} else {
					$(n).next().removeClass("report-errors icon-error  filter");
					if($(n).next()[0]) {
						$(n).next()[0].innerText = ""
					}
				}
			}
		}
		if($(n).attr("name") == "customerName" || $(n).attr("name") == "customerNameNoEncrypt") {
			var q = /[^a-zA-Z\u4E00-\u9FA5\uFF21-\uFF3A\uFF41-\uFF5A]/g;
			var l = $("#" + $(n).attr("name") + "-msg");
			if(q.test($(n).val())) {
				$(n).val(function() {
					return $(n).val().replace(q, "")
				});
				if($(n).val() != "") {
					$(n).nextAll("span").remove();
					$(n).parent().append("<span class='vam icon-warn'>ä¸ºäº†æ›´å¥½çš„é€è¾¾,å·²å¸®ä½ è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦</span>")
				} else {
					$(n).nextAll("span").remove()
				}
			} else {
				$(n).nextAll("span").remove()
			}
		}
		if($(n).attr("name") == "problemDescription" || $(n).attr("name") == "address" || $(n).attr("id") == "vatInvoice-address" || $(n).attr("id") == "contactAddress") {
			var l = $("#" + $(n).attr("name") + "-msg");
			addressFrontRegex = addressFrontRegex.replaceAll("&amp;", "&");
			addressFrontRegex = addressFrontRegex.replaceAll("&#034;", '"');
			addressFrontRegex = addressFrontRegex.replaceAll("&lt;", "<");
			addressFrontRegex = addressFrontRegex.replaceAll("&gt;", ">");
			addressFrontRegex = addressFrontRegex.replaceAll("&#039;", "'");
			var o = new RegExp(addressFrontRegex);
			var m = false;
			$.each($(n).val().split(""), function(t, r) {
				if(!o.test(r)) {
					m = true
				}
			});
			var p = $(n).val().split("").filter(function(r) {
				return o.test(r)
			}).join("");
			if(m) {
				$(n).valS(p);
				if($(n).val() != "") {
					if(l.length) {
						l.addClass("report-errors filter label-error").text("ä¸ºäº†æ›´å¥½çš„é€è¾¾ï¼Œå·²å¸®ä½ è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦")
					} else {
						if($(n).attr("name") == "problemDescription") {
							$("#content-msg").addClass("report-errors filter").text("ä¸ºäº†å®¢æœæ›´å¥½çš„ç†è§£æ‚¨çš„è¯‰æ±‚ï¼Œå·²å¸®æ‚¨è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦")
						} else {
							$(n).next().addClass("report-errors  filter").text("ä¸ºäº†æ›´å¥½çš„é€è¾¾ï¼Œå·²å¸®ä½ è¿‡æ»¤ä¸èƒ½è¯†åˆ«çš„å­—ç¬¦")
						}
					}
				} else {
					if($(n).attr("name") == "problemDescription") {
						$("#content-msg").text("");
						$("#content-msg").removeClass("filter")
					} else {
						l.removeClass("filter")
					}
				}
			} else {
				if(l.length) {
					l.removeClass("filter report-errors icon-error label-error").text("")
				} else {
					if($(n).attr("name") == "problemDescription") {
						$("#content-msg").removeClass("report-errors icon-error  filter").innerText = ""
					} else {
						$(n).next().removeClass("report-errors icon-error  filter");
						if($(n).next()[0]) {
							$(n).next()[0].innerText = ""
						}
					}
				}
			}
		}
	};
	ol.form.getStrLeng = function(o) {
		var p = 0;
		var l = o.length;
		var m = -1;
		for(var n = 0; n < l; n++) {
			m = o.charCodeAt(n);
			if(m >= 0 && m <= 128) {
				p += 1
			} else {
				p += 2
			}
		}
		return p
	};
	ol.form.validator.defaults = g;
	var f = ol.form.validator,
		y = function(m, l) {
			return !m
		};
	f.register("regex", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		if(!l.regex) {
			k("regex", "need parameter of 'regex'!");
			return false
		}
		return l.regex.test(m)
	});
	f.register("require", function(m, l) {
		l.allowEmpty = false;
		return !y(m)
	});
	f.register("email", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		var n = null;
		if(l.separater) {
			n = l.separater
		}
		return ol.util.isEmail(m, n)
	});
	f.register("eq", function(o, l) {
		if(!l.compareTo) {
			k("eq", "need parameter of 'compareTo'!");
			return false
		}
		var m = $(l.compareTo).val();
		if(!l.format) {
			return o == m
		}
		var n = f.get("date");
		if(!(n(o, l) && n(m, l))) {
			return false
		}
		return o.parseDate(l.format).getTime() == m.parseDate(l.format).getTime()
	});
	f.register("lt", function(p, m) {
		if(m.allowEmpty && y(p)) {
			return true
		}
		if(!m.compareTo) {
			k("lt", "need parameter of 'compareTo'!");
			return false
		}
		var n = $(m.compareTo).val();
		if(!m.format) {
			m.negative = true;
			var l = f.get("float");
			if(!l(p, m)) {
				return false
			}
			if(!l(n, m)) {
				return false
			}
			p = parseFloat(p);
			n = parseFloat(n);
			return p < n
		}
		var o = f.get("date");
		if(!(o(p, m) && o(n, m))) {
			return false
		}
		return p.parseDate(m.format) < n.parseDate(m.format)
	});
	f.register("le", function(o, n) {
		var m = f.get("eq");
		var l = f.get("lt");
		return m(o, n) || l(o, n)
	});
	f.register("gt", function(p, m) {
		if(m.allowEmpty && y(p)) {
			return true
		}
		if(!m.compareTo) {
			k("gt", "need parameter of 'compareTo'!");
			return false
		}
		var n = $(m.compareTo).val();
		if(!m.format) {
			m.negative = true;
			var l = f.get("float");
			if(!l(p, m)) {
				return false
			}
			if(!l(n, m)) {
				return false
			}
			p = parseFloat(p);
			n = parseFloat(n);
			return p > n
		}
		var o = f.get("date");
		if(!(o(p, m) && o(n, m))) {
			return false
		}
		return p.parseDate(m.format) > n.parseDate(m.format)
	});
	f.register("ge", function(o, n) {
		var l = f.get("eq");
		var m = f.get("gt");
		return l(o, n) || m(o, n)
	});
	f.register("length", function(n, m) {
		if(m.allowEmpty && y(n)) {
			return true
		}
		if(!(m.min || m.max)) {
			k("length", "need parameter of 'min' or 'max'!");
			return false
		}
		var l = ol.form.getStrLeng(n);
		if(m.min && l < m.min) {
			return false
		}
		if(m.max && l > m.max) {
			return false
		}
		return true
	});
	f.register("range", function(o, n) {
		if(n.allowEmpty && y(o)) {
			return true
		}
		if(!(n.min || n.max)) {
			k("range", "need parameter of 'min' or 'max'!");
			return false
		}
		n.negative = true;
		var m = f.get("float");
		if(!m(o, n)) {
			return false
		}
		var l = parseFloat(o);
		if(n.min && l < n.min) {
			return false
		}
		if(n.max && l > n.max) {
			return false
		}
		return true
	});
	f.register("chinese", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		l.regex = /^[\u4E00-\u9FA5]$/;
		return f.get("regex")(m, l)
	});
	f.register("int", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		if(l.negative) {
			l.regex = /^[-]?\d+$/
		} else {
			l.regex = /^\d+$/
		}
		return f.get("regex")(m, l)
	});
	f.register("float", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		if(l.negative) {
			l.regex = /^[-]?\d+(\.\d+)?$/
		} else {
			l.regex = /^\d+(\.\d+)?$/
		}
		return f.get("regex")(m, l)
	});
	f.register("date", function(p, n) {
		if(n.allowEmpty && y(p)) {
			return true
		}
		if(!n.format) {
			d("date", "need parameter of 'format'!");
			return false
		}
		var o = {
			"\\.": "\\.",
			"M+": "(0[1-9]|[1-9]|1[0-2])",
			"d+": "(0[1-9]|[1-9]|[12][0-9]|3[01])",
			"y+": "(\\d{4})",
			"H+": "([0-9]|[01][0-9]|2[0-3])",
			"m+": "([0-9]|[0-5][0-9])",
			"s+": "([0-9]|[0-5][0-9])",
			S: "(\\d+)"
		};
		var l = n.format;
		for(var m in o) {
			if(new RegExp("(" + m + ")").test(n.format)) {
				l = l.replace(RegExp.$1, o[m])
			}
		}
		n.regex = new RegExp("^" + l + "$");
		if(!f.get("regex")(p, n)) {
			return false
		}
		return p == p.parseDate(n.format).format(n.format)
	});
	f.register("url", function(m, l) {
		if(l.allowEmpty && y(m)) {
			return true
		}
		if(m.startsWith("http://")) {
			m = m.substring(7)
		} else {
			if(m.startsWith("https://")) {
				m = m.substring(8)
			} else {
				if(l.requireProtocol) {
					return false
				}
			}
		}
		if(!m) {
			return false
		}
		l.regex = /^[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
		return f.get("regex")(m, l)
	})
})();
(function() {
	var r = ol.template = function(j) {
		this.init = function() {
			j = g(j);
			var k;
			for(var l = 0; l < j.length; l++) {
				k = h(j[l]);
				b[k[0]] = d(k)
			}
		};
		this.parse = function(l, k) {
			if(!l || !(l = b[l])) {
				return ""
			}
			return a(l, k)
		};
		this.init()
	};
	r.parse = function(l, j) {
		var k = a(d(h(l)), j);
		return k
	};
	r.startDelimiter = "\x3c!--";
	r.endDelimiter = "--\x3e";
	var b = {},
		c = new RegExp(r.startDelimiter + "#macro \\S+\\s*\\w*" + r.endDelimiter + "[\\s\\S]*?" + r.startDelimiter + "/#macro" + r.endDelimiter, "g"),
		g = function(j) {
			return j.match(c)
		},
		f = new RegExp("(" + r.startDelimiter + "(/?)#([\\s\\S]*?)" + r.endDelimiter + ")|(')|([\r\n\t])|({#([^}]*?)})", "g"),
		h = function(k) {
			var u = k.replace(f, function(w, t, I, J, x, y, K, C) {
				if(t) {
					return "\n" + (I ? "-" : "+") + J.replace(/[\r\n\t]/g, "") + "\n"
				}
				if(x) {
					return "\\'"
				}
				if(y) {
					return ""
				}
				if(K) {
					var H = C.indexOf("?");
					if(H != 0) {
						switch(C.substring(H + 1)) {
							case "html":
								C = "ec.autoEncodeAttr(" + C.substring(0, H) + ")";
								break;
							case "js_string":
								C = C.replace(/\"/g, '\\"').replace(/\r\n/g, "\\r\\n").replace(/\n/g, "\\n");
								break
						}
					}
					C = C.replace(/\'/g, "\\'");
					return "'+(" + C + ")+'"
				}
			});
			u = u.split(/\n/);
			var q, l, n, v, j, m = ["var f=[];"];
			for(var z = 0; z < u.length; z++) {
				q = u[z];
				if(!q) {
					continue
				}
				l = q.charAt(0);
				if(l !== "+" && l !== "-") {
					m.push("f.push('" + q + "');");
					continue
				}
				n = q.split(/\s/);
				switch(n[0]) {
					case "+macro":
						v = n[1];
						j = n[2];
						m.push('f.push("\x3c!--' + v + ' start--\x3e");');
						break;
					case "-macro":
						m.push('f.push("\x3c!--' + v + ' end--\x3e");');
						break;
					case "+elseif":
						n.splice(0, 1);
						m.push("}else if" + n.join(" ") + "{");
						break;
					case "+else":
						m.push("}else{");
						break;
					case "+if":
					case "+for":
					case "+switch":
						n[0] = n[0].substr(1);
						m.push(n.join(" ") + "{");
						break;
					case "+case":
					case "+default":
						n[0] = n[0].substr(1);
						m.push(n.join(" ") + ":");
						break;
					case "-switch":
					case "-for":
					case "-if":
						m.push("}");
						break;
					case "+list":
						if(n.length != 4) {
							throw v + ": list command error!"
						}
						var p = n[3] + "_index",
							o = n[3] + "_length",
							A = n[3] + "_num";
						m.push("if(" + n[1] + ".constructor === Array){");
						m.push("var " + n[3] + ";");
						m.push("var " + o + "=" + n[1] + ".length;");
						m.push("var " + p + ";");
						m.push("for(var " + A + "=" + o + ";" + A + "--;){");
						m.push(p + "=" + o + "-" + A + "-1;");
						m.push(n[3] + "=" + n[1] + "[" + p + "];");
						break;
					case "-list":
						m.push("}}");
						break;
					case "+break":
						m.push("break;");
						break;
					case "-list":
						m.push("}}}");
						break;
					case "+eval":
						n.splice(0, 1);
						m.push(n.join(" "));
						break;
					case "+var":
						n[0] = n[0].substr(1);
						m.push(n.join(" ") + ";");
						break;
					default:
						break
				}
			}
			m.push("return f.join('');");
			return [v, j || "data", m.join("")]
		},
		d = function(j) {
			try {
				return new Function(j[1], j[2])
			} catch(k) {
				logger.error("template:" + j[0], k)
			}
		},
		a = function(j, k) {
			return j(k)
		}
})();

function alertS(t) {
	if("string" === typeof t) {
		alert(t.transHtmlAttribute())
	} else {
		alert("å‚æ•°é”™è¯¯")
	}
}
window.ol || (window.ol = {});
(function() {
	var $win, $doc, isIE6 = true,
		_defaults = {
			boxid: "ol_box",
			boxclass: "ol_box",
			type: "dialog",
			title: "",
			width: 0,
			height: 0,
			showTitle: true,
			showButton: true,
			showCancel: true,
			showOk: true,
			okBtnName: "ç¡®å®š",
			cancelBtnName: "å–æ¶ˆ",
			timeout: 0,
			draggable: true,
			modal: true,
			zIndex: 5e3,
			remember: false,
			position: "center",
			clickOut: null,
			onclose: null,
			onopen: null,
			oncancel: null,
			onok: null,
			blur: null,
			focus: null,
			autoHeight: true,
			autoPosition: true,
			cache: false
		};
	var _getDoc = function() {
		return document.compatMode == "CSS1Compat" ? document.documentElement : document.body
	};
	var _getWinSize = function() {
		var doc = _getDoc();
		return {
			width: Math.max(doc.scrollWidth, doc.clientWidth || 0) - 1,
			height: Math.max(doc.scrollHeight, doc.clientHeight || 0) - 1
		}
	};
	var type = {};
	type.dialog = {
		html: "<div>" + '<div class="box-ct">' + '\t<div class="box-header">' + '\t\t<div class="box-tl"></div>' + '\t\t<div class="box-tc">' + '\t\t\t<div class="box-tc1"></div>' + '\t\t\t<div class="box-tc2"><a href="javascript:;" onclick="return false;" title="å…³é—­" class="box-close"></a><span class="box-title"></span></div>' + "\t\t</div>" + '\t\t<div class="box-tr"></div>' + "\t</div>" + '\t<table width="100%" border="0" cellspacing="0" cellpadding="0" style="table-layout:fixed;background:#fff;">' + "\t\t<tr>" + '\t\t\t<td class="box-cl"></td>' + '\t\t\t<td class="box-cc">' + '\t\t\t\t<div class="box-content"></div>' + '\t\t\t\t<div class="box-button">' + '\t\t\t\t\t<a class="box-cancel" href="javascript:;"><span>å–æ¶ˆ</span></a>' + '\t\t\t\t\t<a class="box-ok" href="javascript:;"><span>ç¡®å®š</span></a>' + "\t\t\t\t</div>" + "\t\t\t</td>" + '\t\t\t<td class="box-cr"></td>' + "\t\t</tr>" + "\t</table>" + '\t<div class="box-bottom">' + '\t\t<div class="box-bl"></div>' + '\t\t<div class="box-bc"></div>' + '\t\t<div class="box-br"></div>' + "\t</div>" + "</div>" + "</div>",
		initContent: function(self) {
			self.setContent(self.content)
		},
		setContent: function(self, content, callback) {
			self.content = content || self.content;
			self.setContent(self.content);
			if(typeof callback == "function") callback()
		}
	};
	type.ajax = {
		initContent: function(self) {},
		setContent: function(self, content, callback) {
			self._b_button.hide();
			self.setContent('<div class="box-loading"></div>');
			if(self._b_content.height() < 90) self._b_content.height(Math.max(90, self.options.height));
			if(self._box.width() < 200) self._box.width(Math.max(200, self.options.width));
			var ajaxurl = content || self.content;
			if(typeof ajaxurl != "string") {
				alert("please set ajax url.");
				return
			}
			self.content = ajaxurl;
			if(self.options.cache == false) {
				if(ajaxurl.indexOf("?") == -1) {
					ajaxurl += "?_t=" + Math.random()
				} else {
					ajaxurl += "&_t=" + Math.random()
				}
			}
			$.get(ajaxurl, function(data) {
				if(self.options.showButton) self._b_button.show();
				self.setContent(data);
				if(typeof callback == "function") callback()
			})
		}
	};
	type.iframe = {
		initContent: function(self) {},
		setContent: function(self, content, callback) {
			var url = content || self.content;
			if(typeof url != "string") {
				alert("please set iframe url.");
				return
			}
			self.content = url;
			var name = "box-iframe-" + (new Date).getTime();
			self.setContent('<iframe class="boxIframe" width="100%" height="100%" frameborder="0" name="' + name + '"></iframe><script>ec.redirectTo({url: "' + url + '", win: window["' + name + '"]});<\/script>');
			if(typeof callback == "function") callback()
		},
		closeEvent: function(self) {
			if(!self.options.remember) {
				self.find("iframe").each(function() {
					this.contentWindow.close();
					$(this).remove()
				})
			}
		}
	};
	ol.box = function(content, options) {
		this.options = null;
		this._type = null;
		this._mask = null;
		this._events = {};
		this._box = null;
		this._b_content = null;
		this._b_button = null;
		this.content = content;
		this._initedContent = false;
		this._onbox = false;
		this._isOpen = false;
		$win = $(window);
		$doc = $(document);
		isIE6 = $.browser.msie && $.browser.version == "6.0", this.options = $.extend({}, _defaults, options);
		this.init()
	};
	ol.box.prototype = {
		init: function() {
			this.initConfig();
			if(this.options.modal) this.initMask();
			this.initBox();
			this.initEvent()
		},
		initBox: function() {
			$("#" + this.options.boxid).remove();
			this._box = $(this._type.html).css({
				visibility: "hidden",
				position: "absolute",
				top: 0,
				left: 0,
				zIndex: this.options.zIndex
			});
			this._b_button = this._box.find(".box-button");
			this._b_content = this._box.find(".box-content");
			this.renderBox(this.options);
			$("body").append(this._box);
			this._type.initContent(this)
		},
		initConfig: function() {
			switch(this.options.type) {
				case "ajax":
					this._type = type.ajax;
					break;
				case "iframe":
					this._type = type.iframe;
					break;
				default:
					this._type = type.dialog;
					break
			}
			this._type = $.extend({}, type.dialog, this._type)
		},
		initEvent: function() {
			var thix = this;
			if(this.options.draggable && this.options.showTitle) {
				this._box.find(".box-header").mousedown(function(event) {
					var h = this;
					o = document, ox = parseInt(thix._box.css("left"), 10), oy = parseInt(thix._box.css("top"), 10), mx = event.clientX, my = event.clientY, size = _getWinSize(), box_w = thix._box.outerWidth(true), box_h = thix._box.outerHeight(true);
					if(h.setCapture) h.setCapture();
					var mousemove = function(event) {
						if(window.getSelection) {
							window.getSelection().removeAllRanges()
						} else {
							document.selection.empty()
						}
						var left = Math.max(ox + event.clientX - mx, 0),
							top = Math.max(oy + event.clientY - my, 0);
						left = Math.min(left, size.width - box_w);
						top = Math.min(top, size.height - box_h);
						thix._box.css({
							left: left,
							top: top
						})
					};
					var mouseup = function() {
						if(h.releaseCapture) h.releaseCapture();
						$doc.unbind("mousemove", mousemove);
						$doc.unbind("mouseup", mouseup)
					};
					$doc.mousemove(mousemove).mouseup(mouseup)
				})
			} else {
				this._box.find(".box-header").css("cursor", "default")
			}
		},
		renderBox: function(options) {
			var css = {
				zIndex: options.zIndex,
				position: "absolute"
			};
			if(options.boxid) this._box.attr("id", options.boxid);
			if(options.boxclass) this._box.attr("class", options.boxclass);
			if(!options.showTitle) {
				this._box.find(".box-header").hide()
			} else {
				this.setTitle(options.title)
			}
			if(!options.showButton) {
				this._b_button.hide()
			} else {
				if(!options.showCancel) {
					this._b_button.find(".box-cancel").hide()
				}
				if(!options.showOk) {
					this._b_button.find(".box-ok").hide()
				}
			}
			this._b_button.find(".box-ok span").html(options.okBtnName);
			this._b_button.find(".box-cancel span").html(options.cancelBtnName);
			this._box.css(css)
		},
		setTitle: function(title) {
			if(title.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, "") == "") {
				this._box.find(".box-title").remove();
				return this
			}
			this._box.find(".box-title").html(title);
			return this
		},
		setContent: function(content) {
			if(typeof content == "undefined" || content == null) return;
			this._initedContent = true;
			this._b_content.empty().html(content);
			var thix = this;
			if(this.options.width > 0) {
				this._box.css("width", this.options.width)
			} else {
				this._box.css("width", null)
			}
			if(this.options.height > 0) {
				var css = {
					height: this.options.height
				};
				this.options.autoHeight || (css["overflow-y"] = "auto");
				this._b_content.css(css)
			} else {
				this._b_content.css("height", "auto")
			}
			this.setPosition();
			this._box.find(".box-close, .box-cancel, .box-ok").unbind("click").click(function() {
				thix.close()
			});
			if(typeof this.options.onok == "function") {
				this._box.find(".box-ok").unbind("click").click(function() {
					thix.options.onok.call(this, thix)
				})
			}
			if(typeof this.options.oncancel == "function") {
				this._box.find(".box-cancel").unbind("click").click(function() {
					thix.options.oncancel.call(this, thix)
				})
			}
			this._box.find(".box-close, .box-cancel, .box-ok").unbind("keypress").bind("keypress", function(e) {
				e = e || window.event;
				var key = e.which || e.charCode || e.keyCode;
				switch(key) {
					case 27:
						thix.close();
						return false;
					case 32:
					case 13:
						$(document.activeElement).trigger("click");
						return false
				}
			})
		},
		openEvent: function() {
			if(this._isOpen) return;
			var thix = this;
			if(this.options.autoPosition) {
				if(this.options.position != "center") {
					var timer;
					this._events["scroll"] = function() {
						clearTimeout(timer);
						timer = setTimeout(function() {
							thix.setPosition()
						}, 300)
					};
					$win.scroll(this._events["scroll"])
				}
				this._events["resize"] = function() {
					thix.setPosition()
				};
				$win.resize(this._events["resize"])
			}
			if(this.options.timeout > 0) {
				this._events["timeout"] = setTimeout(function() {
					thix.close()
				}, this.options.timeout)
			}
			this._onbox = true;
			if(this.options.clickOut) {
				this._events["box_click"] = function(event) {
					thix._onbox = true
				};
				this._events["document_click"] = function(event) {
					if(event.button != 0) return true;
					if(thix._onbox === false) {
						thix.options.clickOut(thix)
					}
					thix._onbox = false
				};
				this._box.bind("click", this._events["box_click"]);
				$doc.bind("click", this._events["document_click"])
			}
			if(this.options.modal) {
				this.showMask()
			}
			if(this.options.onopen) this.options.onopen(this);
			if(this.options.focus) {
				$(this.options.focus).focus()
			}
			this._isOpen = true
		},
		closeEvent: function() {
			clearTimeout(this._events["timeout"]);
			if(this._events["scroll"]) $win.unbind("scroll", this._events["scroll"]);
			if(this._events["resize"]) $win.unbind("resize", this._events["resize"]);
			if(this._events["box_click"]) this._box.unbind("click", this._events["box_click"]);
			if(this._events["document_click"]) $doc.unbind("click", this._events["document_click"]);
			if(this.options.modal) {
				this.hideMask()
			}
			if(this.options.onclose) this.options.onclose(this);
			if(this.options.blur) {
				$(this.options.blur).focus()
			}
			this._isOpen = false;
			if(this._type.closeEvent) this._type.closeEvent(this)
		},
		setPosition: function() {
			if(this.options.position == "center") {
				var w_h = $win.height();
				var w_w = $win.width();
				var box_w = this._box.outerWidth(true);
				var box_c_h = this._b_content.outerHeight(true);
				var box_h_h = this._box.find(".box-header:first").outerHeight(true);
				var box_h_b = this._box.find(".box-bottom:first").outerHeight(true);
				var box_h = box_c_h + box_h_h + box_h_b;
				if(this.options.showButton) box_h += 78;
				var offset = {
					x: (w_w - box_w) / 2,
					y: (w_h - box_h) / 2
				};
				var css = {
					position: "fixed"
				};
				if(offset.x < 0) {
					css.width = w_w;
					offset.x = 0
				}
				if(offset.y < 0) {
					css.height = w_h;
					offset.y = 0
				}
				css.top = offset.y;
				css.left = offset.x;
				if(isIE6) {
					css.position = "absolute";
					var h = $("html");
					if(!h.css("background-image") || h.css("background-image") == "none") h.css("background-image", "url(about:blank)");
					this._box[0].style.setExpression("left", "(document.documentElement || document.body).scrollLeft+" + css.left + '+"px"');
					this._box[0].style.setExpression("top", "(document.documentElement || document.body).scrollTop+" + css.top + '+"px"');
					delete css["top"];
					delete css["left"]
				}
				this._box.css(css);
				return
			} else if(Object.prototype.toString.call(this.options.position) === "[object Object]") {
				var top = this.options.position.top || 0;
				var left = this.options.position.left || 0;
				if(this.options.position.ref) {
					var ref = $(this.options.position.ref);
					var offset = ref.offset();
					top += offset.top;
					top += ref.outerHeight(true);
					left += offset.left
				}
				this._box.css({
					top: top,
					left: left
				})
			}
		},
		renderContent: function(content, callback) {
			if(typeof content != "undefined" && content != null) this._initedContent = false;
			if(!this._initedContent || !this.options.remember) {
				this._type.setContent(this, content, callback)
			} else {
				this.setPosition();
				this.openEvent()
			}
		},
		open: function(content, options) {
			if(this._isOpen) {
				this.closeEvent()
			}
			this.options = $.extend({}, this.options, options);
			var thix = this;
			this.renderContent(content, function() {
				thix.openEvent()
			});
			this._box.stop().css({
				visibility: "visible",
				opacity: null
			});
			return this
		},
		close: function() {
			this.closeEvent();
			this._box.css("visibility", "hidden")
		},
		isOpen: function() {
			return this._isOpen
		},
		fadeIn: function(content, options, ms) {
			this.options = $.extend({}, this.options, options);
			this.renderContent(content);
			var opacity = this._box.css("opacity") || 1;
			this._box.css({
				opacity: 0,
				visibility: "visible"
			}).stop().animate({
				opacity: opacity
			}, ms);
			this.openEvent()
		},
		fadeOut: function(ms) {
			var thix = this;
			this.closeEvent();
			this._box.stop().animate({
				opacity: 0
			}, ms, function() {
				thix._box.css({
					visibility: "hidden",
					opacity: null
				})
			})
		},
		find: function(selector) {
			return this._b_content.find(selector)
		},
		getBox: function() {
			return this._box
		},
		initMask: function() {
			if($(".ol_box_mask")) {
				$(".ol_box_mask").remove()
			}
			this._mask = $("<div class='ol_box_mask'></div>").css({
				visibility: "hidden",
				width: 0,
				height: 0,
				zIndex: this.options.zIndex - 1
			});
			$("body").append(this._mask);
			var thix = this;
			this._events["masker_resize"] = function() {
				thix._mask.css(_getWinSize())
			}
		},
		showMask: function() {
			var css = _getWinSize();
			css.visibility = "visible";
			this._mask.css(css);
			$win.bind("resize", this._events["masker_resize"])
		},
		hideMask: function() {
			this._mask.css({
				visibility: "hidden",
				width: 0,
				height: 0
			});
			$win.unbind("resize", this._events["masker_resize"])
		}
	}
})();
(function() {
	ec.encodeInit = function() {
		if("object" !== typeof $ESAPI || null === $ESAPI) {
			org.owasp.esapi.ESAPI.initialize()
		}
	};
	ec.encodeForJS = function(input) {
		if("string" !== typeof input) {
			return input
		}
		ec.encodeInit();
		return $ESAPI.encoder().encodeForJavaScript(input)
	};
	ec.encodeForAttr = function(input) {
		if("string" === typeof input) {
			ec.encodeInit();
			input = $ESAPI.encoder().encodeForHTMLAttribute(input);
			if(!input) input = "";
			input = input.replaceAll(" ", "&#x20;")
		}
		return input
	};
	ec.encryptJSON = function(jsonObj) {
		if(typeof jsonObj === "object") {
			for(var key in jsonObj) {
				if(typeof jsonObj[key] === "object") {
					ec.encryptJSON(jsonObj[key])
				} else if(typeof jsonObj[key] === "string" && !/^[\w\d\s\-\:\+]+$/.test(jsonObj[key])) {
					jsonObj[key] = ec.encodeForAttr(jsonObj[key])
				}
			}
		}
	};
	ec.autoEncodeAttr = function(input) {
		if("string" !== typeof input) {
			return input
		}
		if(input.indexOf("&") > -1) {
			var tmp = document.createElement("textarea");
			tmp.innerHTML = input;
			input = tmp.value
		}
		return ec.encodeForAttr(input)
	}
})();
var $namespace = function(d, g, b) {
	var f = d.split(g || "."),
		h = b || window,
		e, a;
	for(e = 0, a = f.length; e < a; e++) {
		h = h[f[e]] = h[f[e]] || {}
	}
	return h
};
var $type = function(a, b) {
	if(!a instanceof b) {
		throw new SyntaxError()
	}
};
if(!$) {
	var $ = function(a) {
		return document.getElementById(a)
	}
}
if(!Array.prototype.each) {
	Array.prototype.each = function(a) {
		if(typeof a != "function") {
			throw "Illegal Argument for Array.each"
		}
		for(var b = 0; b < this.length; b++) {
			a(this[b])
		}
	}
}
if(!Array.prototype.contains) {
	Array.prototype.contains = function(b) {
		var a = false;
		this.each(function(d) {
			if((b.equals && b.equals(d)) || d == b) {
				a = true;
				return
			}
		});
		return a
	}
}
if(!Array.prototype.containsKey) {
	Array.prototype.containsKey = function(b) {
		for(var a in this) {
			if(a.toLowerCase() == b.toLowerCase()) {
				return true
			}
		}
		return false
	}
}
if(!Array.prototype.getCaseInsensitive) {
	Array.prototype.getCaseInsensitive = function(b) {
		for(var a in this) {
			if(a.toLowerCase() == b.toLowerCase()) {
				return this[a]
			}
		}
		return null
	}
}
if(!String.prototype.charCodeAt) {
	String.prototype.charCodeAt = function(a) {
		var e = this.charAt(a);
		for(var b = 0; b < 65536; b++) {
			var d = String.fromCharCode(b);
			if(d == e) {
				return b
			}
		}
		return 0
	}
}
if(!String.prototype.endsWith) {
	String.prototype.endsWith = function(a) {
		return this.substr((this.length - a.length), a.length) == a
	}
}
if(!Exception) {
	var Exception = function(a, b) {
		this.cause = b;
		this.errorMessage = a
	};
	Exception.prototype = Error.prototype;
	Exception.prototype.getCause = function() {
		return this.cause
	};
	Exception.prototype.getMessage = function() {
		return this.message
	};
	Exception.prototype.getStackTrace = function() {
		if(this.callstack) {
			return this.callstack
		}
		if(this.stack) {
			var b = stack.split("\n");
			for(var d = 0, a = b.length; d < a; d++) {
				if(b[d].match(/^\s*[A-Za-z0-9\=+\$]+\(/)) {
					this.callstack.push(b[d])
				}
			}
			this.callstack.shift();
			return this.callstack
		} else {
			if(window.opera && this.message) {
				var b = this.message.split("\n");
				for(var d = 0, a = b.length; d < a; d++) {
					if(b[d].match(/^\s*[A-Za-z0-9\=+\$]+\(/)) {
						var f = b[d];
						if(b[d + 1]) {
							f += " at " + b[d + 1];
							d++
						}
						this.callstack.push(f)
					}
				}
				this.callstack.shift();
				return this.callstack
			} else {
				var g = arguments.callee.caller;
				while(g) {
					var e = g.toString();
					var h = e.substring(e.indexOf("function") + 8, e.indexOf("(")) || "anonymous";
					this.callstack.push(h);
					g = g.caller
				}
				return this.callstack
			}
		}
	};
	Exception.prototype.printStackTrace = function(b) {
		var a = this.getMessage() + "|||" + this.getStackTrace().join("|||");
		if(this.cause) {
			if(this.cause.printStackTrace) {
				a += "||||||Caused by " + this.cause.printStackTrace().replace("\n", "|||")
			}
		}
		if(!b) {
			return b.replace("|||", "\n")
		} else {
			if(b.value) {
				b.value = a.replace("|||", "\n")
			} else {
				if(b.writeln) {
					b.writeln(a.replace("|||", "\n"))
				} else {
					if(b.innerHTML) {
						b.innerHTML = a.replace("|||", "<br/>")
					} else {
						if(b.innerText) {
							b.innerText = a.replace("|||", "<br/>")
						} else {
							if(b.append) {
								b.append(a.replace("|||", "\n"))
							} else {
								if(b instanceof Function) {
									b(a.replace("|||", "\n"))
								}
							}
						}
					}
				}
			}
		}
	}
}
if(!RuntimeException) {
	var RuntimeException = Exception
}
if(!IllegalArgumentException) {
	var IllegalArgumentException = Exception
}
if(!DateFormat) {
	var DateFormat = function(d) {
		var b = d;
		var a = {
			longMonths: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
			shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
			longDays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
			shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
			d: function(e) {
				return(e.getDate() < 10 ? "0" : "") + e.getDate()
			},
			D: function(e) {
				return a.shortDays[e.getDay()]
			},
			j: function(e) {
				return e.getDate()
			},
			l: function(e) {
				return a.longDays[e.getDay()]
			},
			N: function(e) {
				return e.getDay() + 1
			},
			S: function(e) {
				return(e.getDate() % 10 == 1 && e.getDate() != 11 ? "st" : (e.getDate() % 10 == 2 && e.getDate() != 12 ? "nd" : (e.getDate() % 10 == 3 && e.getDate() != 13 ? "rd" : "th")))
			},
			w: function(e) {
				return e.getDay()
			},
			z: function(e) {
				return "Not Yet Supported"
			},
			W: function(e) {
				return "Not Yet Supported"
			},
			F: function(e) {
				return a.longMonths[e.getMonth()]
			},
			m: function(e) {
				return(e.getMonth() < 9 ? "0" : "") + (e.getMonth() + 1)
			},
			M: function(e) {
				return a.shortMonths[e.getMonth()]
			},
			n: function(e) {
				return e.getMonth() + 1
			},
			t: function(e) {
				return "Not Yet Supported"
			},
			L: function(e) {
				return(((e.getFullYear() % 4 == 0) && (e.getFullYear() % 100 != 0)) || (e.getFullYear() % 400 == 0)) ? "1" : "0"
			},
			o: function(e) {
				return "Not Supported"
			},
			Y: function(e) {
				return e.getFullYear()
			},
			y: function(e) {
				return("" + e.getFullYear()).substr(2)
			},
			a: function(e) {
				return e.getHours() < 12 ? "am" : "pm"
			},
			A: function(e) {
				return e.getHours() < 12 ? "AM" : "PM"
			},
			B: function(e) {
				return "Not Yet Supported"
			},
			g: function(e) {
				return e.getHours() % 12 || 12
			},
			G: function(e) {
				return e.getHours()
			},
			h: function(e) {
				return((e.getHours() % 12 || 12) < 10 ? "0" : "") + (e.getHours() % 12 || 12)
			},
			H: function(e) {
				return(e.getHours() < 10 ? "0" : "") + e.getHours()
			},
			i: function(e) {
				return(e.getMinutes() < 10 ? "0" : "") + e.getMinutes()
			},
			s: function(e) {
				return(e.getSeconds() < 10 ? "0" : "") + e.getSeconds()
			},
			e: function(e) {
				return "Not Yet Supported"
			},
			I: function(e) {
				return "Not Supported"
			},
			O: function(e) {
				return(-e.getTimezoneOffset() < 0 ? "-" : "+") + (Math.abs(e.getTimezoneOffset() / 60) < 10 ? "0" : "") + (Math.abs(e.getTimezoneOffset() / 60)) + "00"
			},
			P: function(e) {
				return(-e.getTimezoneOffset() < 0 ? "-" : "+") + (Math.abs(e.getTimezoneOffset() / 60) < 10 ? "0" : "") + (Math.abs(e.getTimezoneOffset() / 60)) + ":" + (Math.abs(e.getTimezoneOffset() % 60) < 10 ? "0" : "") + (Math.abs(e.getTimezoneOffset() % 60))
			},
			T: function(g) {
				var f = g.getMonth();
				g.setMonth(0);
				var e = g.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, "$1");
				g.setMonth(f);
				return e
			},
			Z: function(e) {
				return -e.getTimezoneOffset() * 60
			},
			c: function(e) {
				return e.format("Y-m-d") + "T" + e.format("H:i:sP")
			},
			r: function(e) {
				return e.toString()
			},
			U: function(e) {
				return e.getTime() / 1000
			}
		};
		return {
			format: function(g) {
				var e = "";
				for(var f = 0; f < b.length; f++) {
					var h = b.charAt(f);
					if(a[h]) {
						e += a[h].call(g)
					} else {
						e += h
					}
				}
				return e
			}
		}
	};
	DateFormat.getDateInstance = function() {
		return new DateFormat("M/d/y h:i a")
	}
}
$namespace("org.owasp.esapi");
org.owasp.esapi.ESAPI = function(g) {
	var b = g;
	if(!b) {
		throw new RuntimeException("Configuration Error - Unable to load $ESAPI_Properties Object")
	}
	var a = null;
	var e = null;
	var d = null;
	var f = null;
	var h = null;
	return {
		properties: b,
		encoder: function() {
			if(!a) {
				if(!b.encoder.Implementation) {
					throw new RuntimeException("Configuration Error - $ESAPI.properties.encoder.Implementation object not found.")
				}
				a = new b.encoder.Implementation()
			}
			return a
		},
		logFactory: function() {
			if(!d) {
				if(!b.logging.Implementation) {
					throw new RuntimeException("Configuration Error - $ESAPI.properties.logging.Implementation object not found.")
				}
				d = new b.logging.Implementation()
			}
			return d
		},
		logger: function(i) {
			return this.logFactory().getLogger(i)
		},
		locale: function() {
			return org.owasp.esapi.i18n.Locale.getLocale(b.localization.DefaultLocale)
		},
		resourceBundle: function() {
			if(!f) {
				if(!b.localization.StandardResourceBundle) {
					throw new RuntimeException("Configuration Error - $ESAPI.properties.localization.StandardResourceBundle not found.")
				}
				f = new org.owasp.esapi.i18n.ObjectResourceBundle(b.localization.StandardResourceBundle)
			}
			return f
		},
		validator: function() {
			if(!e) {
				if(!b.validation.Implementation) {
					throw new RuntimeException("Configuration Error - $ESAPI.properties.validation.Implementation object not found.")
				}
				e = new b.validation.Implementation()
			}
			return e
		},
		httpUtilities: function() {
			if(!h) {
				h = new org.owasp.esapi.HTTPUtilities()
			}
			return h
		}
	}
};
var $ESAPI = null;
org.owasp.esapi.ESAPI.initialize = function() {
	$ESAPI = new org.owasp.esapi.ESAPI(Base.esapi.properties)
};
$namespace("org.owasp.esapi");
org.owasp.esapi.Encoder = function() {};
$namespace("org.owasp.esapi");
org.owasp.esapi.EncoderConstants = {
	CHAR_LOWERS: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"],
	CHAR_UPPERS: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"],
	CHAR_DIGITS: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
	CHAR_SPECIALS: ["!", "$", "*", "+", "-", ".", "=", "?", "@", "^", "_", "|", "~"],
	CHAR_LETTERS: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"],
	CHAR_ALNUM: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
};
$namespace("org.owasp.esapi");
org.owasp.esapi.EnterpriseSecurityException = function(b, a, e) {
	var f = a;
	var d = new Exception(b, e);
	return {
		getMessage: d.getMessage,
		getUserMessage: d.getMessage,
		getLogMessage: function() {
			return f
		},
		getStackTrace: d.getStackTrace,
		printStackTrace: d.printStackTrace
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.HTTPUtilities = function() {
	var b = $ESAPI.logger("HTTPUtilities");
	var d = $ESAPI.resourceBundle();
	var a = org.owasp.esapi.Logger.EventType;
	return {
		addCookie: function(h) {
			$type(h, org.owasp.esapi.net.Cookie);
			if(window.top.location.protocol != "http:" || window.top.location.protocol != "https:") {
				throw new RuntimeException(d.getString("HTTPUtilities.Cookie.Protocol", {
					protocol: window.top.location.protocol
				}))
			}
			var f = h.getName(),
				m = h.getValue(),
				k = h.getMaxAge(),
				i = h.getDomain(),
				p = h.getPath(),
				e = h.getSecure();
			var n = new org.owasp.esapi.ValidationErrorList();
			var l = $ESAPI.validator().getValidInput("cookie name", f, "HttpCookieName", 50, false, n);
			var g = $ESAPI.validator().getValidInput("cookie value", m, "HttpCookieValue", 5000, false, n);
			if(n.size() == 0) {
				var j = f + "=" + escape(m);
				j += k ? ";expires=" + (new Date((new Date()).getTime() + (1000 * k)).toGMTString()) : "";
				j += p ? ";path=" + p : "";
				j += i ? ";domain=" + i : "";
				j += e || $ESAPI.properties.httputilities.cookies.ForceSecure ? ";secure" : "";
				document.cookie = j
			} else {
				b.warning(a.SECURITY_FAILURE, d.getString("HTTPUtilities.Cookie.UnsafeData", {
					name: f,
					value: m
				}))
			}
		},
		getCookie: function(j) {
			var f = document.cookie.split("; ");
			for(var h = 0, e = f.length; h < e; h++) {
				var g = f[h].split("=");
				if(g[0] == escape(j)) {
					return new org.owasp.esapi.net.Cookie(j, g[1] ? unescape(g[1]) : "")
				}
			}
			return null
		},
		killAllCookies: function() {
			var f = document.cookie.split("; ");
			for(var j = 0, e = f.length; j < e; j++) {
				var h = f[j].split("=");
				var g = unescape(h[0]);
				if(!this.killCookie(g)) {
					throw new RuntimeException(d.getString("HTTPUtilities.Cookie.CantKill", {
						name: g
					}))
				}
			}
		},
		killCookie: function(e) {
			var f = this.getCookie(e);
			if(f) {
				f.setMaxAge(-10);
				this.addCookie(f);
				if(this.getCookie(e)) {
					throw new RuntimeException(d.getString("HTTPUtilities.Cookie.CantKill", {
						name: e
					}))
				}
				return true
			}
			return false
		},
		getRequestParameter: function(f) {
			var e = window.top.location.search.substring(1);
			var g = e.indexOf(f);
			if(g < 0) {
				return null
			}
			g = g + f.length;
			var h = e.indexOf("&", g);
			if(h < 0) {
				h = e.length
			}
			return unescape(e.substring(g, h))
		}
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.IntrusionException = function(d, b, a) {
	var e = new org.owasp.esapi.EnterpriseSecurityException(d, b, a);
	return {
		getMessage: e.getMessage,
		getUserMessage: e.getMessage,
		getLogMessage: e.getLogMessage,
		getStackTrace: e.getStackTrace,
		printStackTrace: e.printStackTrace
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.LogFactory = function() {
	return {
		getLogger: false
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.Logger = function() {
	return {
		setLevel: false,
		fatal: false,
		error: false,
		isErrorEnabled: false,
		warning: false,
		isWarningEnabled: false,
		info: false,
		isInfoEnabled: false,
		debug: false,
		isDebugEnabled: false,
		trace: false,
		isTraceEnabled: false
	}
};
org.owasp.esapi.Logger.EventType = function(d, b) {
	var a = d;
	var e = b;
	return {
		isSuccess: function() {
			return e
		},
		toString: function() {
			return a
		}
	}
};
with(org.owasp.esapi.Logger) {
	EventType.SECURITY_SUCCESS = new EventType("SECURITY SUCCESS", true);
	EventType.SECURITY_FAILURE = new EventType("SECURITY FAILURE", false);
	EventType.EVENT_SUCCESS = new EventType("EVENT SUCCESS", true);
	EventType.EVENT_FAILURE = new EventType("EVENT FAILURE", false);
	OFF = Number.MAX_VALUE;
	FATAL = 1000;
	ERROR = 800;
	WARNING = 600;
	INFO = 400;
	DEBUG = 200;
	TRACE = 100;
	ALL = Number.MIN_VALUE
}
$namespace("org.owasp.esapi");
org.owasp.esapi.PreparedString = function(d, a, g) {
	var f = [];
	var e = [];

	function b(k) {
		var h = 0,
			l = 0;
		for(var j = 0; j < k.length; j++) {
			if(k.charAt(j) == g) {
				l++;
				f.push(k.substr(h, j));
				h = j + 1
			}
		}
		f.push(k.substr(h));
		e = new Array(l)
	}
	if(!g) {
		g = "?"
	}
	b(d);
	return {
		set: function(h, j, i) {
			if(h < 1 || h > e.length) {
				throw new IllegalArgumentException("Attempt to set parameter: " + h + " on a PreparedString with only " + e.length + " placeholders")
			}
			if(!i) {
				i = a
			}
			e[h - 1] = i.encode([], j)
		},
		toString: function() {
			for(var h = 0; h < e.length; h++) {
				if(e[h] == null) {
					throw new RuntimeException("Attempt to render PreparedString without setting parameter " + (h + 1))
				}
			}
			var j = "",
				k = 0;
			for(var l = 0; l < f.length; l++) {
				j += f[l];
				if(k < e.length) {
					j += e[k++]
				}
			}
			return j
		}
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.ValidationErrorList = function() {
	var a = Array();
	return {
		addError: function(b, d) {
			if(b == null) {
				throw new RuntimeException("Context cannot be null: " + d.getLogMessage(), d)
			}
			if(d == null) {
				throw new RuntimeException("Context (" + b + ") - Error cannot be null")
			}
			if(a[b]) {
				throw new RuntimeException("Context (" + b + ") already exists. must be unique.")
			}
			a[b] = d
		},
		errors: function() {
			return a
		},
		isEmpty: function() {
			return a.length == 0
		},
		size: function() {
			return a.length
		}
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.ValidationRule = function() {
	return {
		getValid: false,
		setAllowNull: false,
		getTypeName: false,
		setTypeName: false,
		setEncoder: false,
		assertValid: false,
		getSafe: false,
		isValid: false,
		whitelist: false
	}
};
$namespace("org.owasp.esapi");
org.owasp.esapi.Validator = function() {
	return {
		addRule: false,
		getRule: false,
		getValidInput: false,
		isValidDate: false,
		getValidDate: false,
		isValidSafeHTML: false,
		getValidSafeHTML: false,
		isValidCreditCard: false,
		getValidCreditCard: false,
		isValidFilename: false,
		getValidFilename: false,
		isValidNumber: false,
		getValidNumber: false,
		isValidPrintable: false,
		getValidPrintable: false
	}
};
$namespace("org.owasp.esapi.codecs.Base64");
org.owasp.esapi.codecs.Base64 = {
	_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	encode: function(h) {
		if(!h) {
			return null
		}
		var e = "";
		var d, b, a, m, l, k, j;
		var f = 0;
		var g = org.owasp.esapi.codecs.UTF8.encode(h);
		while(f < g.length) {
			d = g.charCodeAt(f++);
			b = g.charCodeAt(f++);
			a = g.charCodeAt(f++);
			m = d >> 2;
			l = ((d & 3) << 4) | (b >> 4);
			k = ((b & 15) << 2) | (a >> 6);
			j = a & 63;
			if(isNaN(b)) {
				k = j = 64
			} else {
				if(isNaN(a)) {
					j = 64
				}
			}
			e += this._keyStr.charAt(m) + this._keyStr.charAt(l) + this._keyStr.charAt(k) + this._keyStr.charAt(j)
		}
		return e
	},
	decode: function(h) {
		if(!h) {
			return null
		}
		var e = "";
		var d, b, a, m, l, k, j;
		var f = 0;
		var g = h.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		while(f < g.length) {
			m = this._keyStr.indexOf(g.charAt(f++));
			l = this._keyStr.indexOf(g.charAt(f++));
			k = this._keyStr.indexOf(g.charAt(f++));
			j = this._keyStr.indexOf(g.charAt(f++));
			d = (m << 2) | (l >> 4);
			b = ((l & 15) << 4) | (k >> 2);
			a = ((k & 3) << 6) | j;
			e += String.fromCharCode(d);
			if(k != 64) {
				e += String.fromCharCode(b)
			}
			if(j != 64) {
				e += String.fromCharCode(a)
			}
		}
		e = org.owasp.esapi.codecs.UTF8.decode(e);
		return e
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.CSSCodec = function() {
	var a = new org.owasp.esapi.codecs.Codec();
	return {
		encode: a.encode,
		decode: a.decode,
		encodeCharacter: function(b, e) {
			if(b.contains(e)) {
				return e
			}
			var d = org.owasp.esapi.codecs.Codec.getHexForNonAlphanumeric(e);
			if(d == null) {
				return e
			}
			return "\\" + d + " "
		},
		decodeCharacter: function(l) {
			l.mark();
			var h = l.next();
			if(h == null) {
				l.reset();
				return null
			}
			if(h != "\\") {
				l.reset();
				return null
			}
			var d = l.next();
			if(d == null) {
				l.reset();
				return null
			}
			if(l.isHexDigit(d)) {
				var b = d;
				for(var f = 0; f < 6; f++) {
					var k = l.next();
					if(k == null || k.charCodeAt(0) == 32) {
						break
					}
					if(l.isHexDigit(k)) {
						b += k
					} else {
						input.pushback(k);
						break
					}
				}
				try {
					var j = parseInt(b, 16);
					return String.fromCharCode(j)
				} catch(g) {
					l.reset();
					return null
				}
			}
			return d
		}
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.Codec = function() {
	return {
		encode: function(d, e) {
			var a = "";
			for(var b = 0; b < e.length; b++) {
				var f = e.charAt(b);
				a += this.encodeCharacter(d, f)
			}
			return a
		},
		encodeCharacter: function(a, b) {
			return b
		},
		decode: function(b) {
			var a = "";
			var d = new org.owasp.esapi.codecs.PushbackString(b);
			while(d.hasNext()) {
				var e = this.decodeCharacter(d);
				if(e != null) {
					a += e
				} else {
					a += d.next()
				}
			}
			return a
		},
		decodeCharacter: function(a) {
			return a.next()
		}
	}
};
org.owasp.esapi.codecs.Codec.getHexForNonAlphanumeric = function(a) {
	if(a.charCodeAt(0) < 256) {
		return org.owasp.esapi.codecs.Codec.hex[a.charCodeAt(0)]
	}
	return a.charCodeAt(0).toString(16)
};
org.owasp.esapi.codecs.Codec.hex = [];
for(var c = 0; c < 255; c++) {
	if(c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122) {
		org.owasp.esapi.codecs.Codec.hex[c] = null
	} else {
		org.owasp.esapi.codecs.Codec.hex[c] = c.toString(16)
	}
}
var entityToCharacterMap = [];
entityToCharacterMap["&quot"] = "34";
entityToCharacterMap["&amp"] = "38";
entityToCharacterMap["&lt"] = "60";
entityToCharacterMap["&gt"] = "62";
entityToCharacterMap["&nbsp"] = "160";
entityToCharacterMap["&iexcl"] = "161";
entityToCharacterMap["&cent"] = "162";
entityToCharacterMap["&pound"] = "163";
entityToCharacterMap["&curren"] = "164";
entityToCharacterMap["&yen"] = "165";
entityToCharacterMap["&brvbar"] = "166";
entityToCharacterMap["&sect"] = "167";
entityToCharacterMap["&uml"] = "168";
entityToCharacterMap["&copy"] = "169";
entityToCharacterMap["&ordf"] = "170";
entityToCharacterMap["&laquo"] = "171";
entityToCharacterMap["&not"] = "172";
entityToCharacterMap["&shy"] = "173";
entityToCharacterMap["&reg"] = "174";
entityToCharacterMap["&macr"] = "175";
entityToCharacterMap["&deg"] = "176";
entityToCharacterMap["&plusmn"] = "177";
entityToCharacterMap["&sup2"] = "178";
entityToCharacterMap["&sup3"] = "179";
entityToCharacterMap["&acute"] = "180";
entityToCharacterMap["&micro"] = "181";
entityToCharacterMap["&para"] = "182";
entityToCharacterMap["&middot"] = "183";
entityToCharacterMap["&cedil"] = "184";
entityToCharacterMap["&sup1"] = "185";
entityToCharacterMap["&ordm"] = "186";
entityToCharacterMap["&raquo"] = "187";
entityToCharacterMap["&frac14"] = "188";
entityToCharacterMap["&frac12"] = "189";
entityToCharacterMap["&frac34"] = "190";
entityToCharacterMap["&iquest"] = "191";
entityToCharacterMap["&Agrave"] = "192";
entityToCharacterMap["&Aacute"] = "193";
entityToCharacterMap["&Acirc"] = "194";
entityToCharacterMap["&Atilde"] = "195";
entityToCharacterMap["&Auml"] = "196";
entityToCharacterMap["&Aring"] = "197";
entityToCharacterMap["&AElig"] = "198";
entityToCharacterMap["&Ccedil"] = "199";
entityToCharacterMap["&Egrave"] = "200";
entityToCharacterMap["&Eacute"] = "201";
entityToCharacterMap["&Ecirc"] = "202";
entityToCharacterMap["&Euml"] = "203";
entityToCharacterMap["&Igrave"] = "204";
entityToCharacterMap["&Iacute"] = "205";
entityToCharacterMap["&Icirc"] = "206";
entityToCharacterMap["&Iuml"] = "207";
entityToCharacterMap["&ETH"] = "208";
entityToCharacterMap["&Ntilde"] = "209";
entityToCharacterMap["&Ograve"] = "210";
entityToCharacterMap["&Oacute"] = "211";
entityToCharacterMap["&Ocirc"] = "212";
entityToCharacterMap["&Otilde"] = "213";
entityToCharacterMap["&Ouml"] = "214";
entityToCharacterMap["&times"] = "215";
entityToCharacterMap["&Oslash"] = "216";
entityToCharacterMap["&Ugrave"] = "217";
entityToCharacterMap["&Uacute"] = "218";
entityToCharacterMap["&Ucirc"] = "219";
entityToCharacterMap["&Uuml"] = "220";
entityToCharacterMap["&Yacute"] = "221";
entityToCharacterMap["&THORN"] = "222";
entityToCharacterMap["&szlig"] = "223";
entityToCharacterMap["&agrave"] = "224";
entityToCharacterMap["&aacute"] = "225";
entityToCharacterMap["&acirc"] = "226";
entityToCharacterMap["&atilde"] = "227";
entityToCharacterMap["&auml"] = "228";
entityToCharacterMap["&aring"] = "229";
entityToCharacterMap["&aelig"] = "230";
entityToCharacterMap["&ccedil"] = "231";
entityToCharacterMap["&egrave"] = "232";
entityToCharacterMap["&eacute"] = "233";
entityToCharacterMap["&ecirc"] = "234";
entityToCharacterMap["&euml"] = "235";
entityToCharacterMap["&igrave"] = "236";
entityToCharacterMap["&iacute"] = "237";
entityToCharacterMap["&icirc"] = "238";
entityToCharacterMap["&iuml"] = "239";
entityToCharacterMap["&eth"] = "240";
entityToCharacterMap["&ntilde"] = "241";
entityToCharacterMap["&ograve"] = "242";
entityToCharacterMap["&oacute"] = "243";
entityToCharacterMap["&ocirc"] = "244";
entityToCharacterMap["&otilde"] = "245";
entityToCharacterMap["&ouml"] = "246";
entityToCharacterMap["&divide"] = "247";
entityToCharacterMap["&oslash"] = "248";
entityToCharacterMap["&ugrave"] = "249";
entityToCharacterMap["&uacute"] = "250";
entityToCharacterMap["&ucirc"] = "251";
entityToCharacterMap["&uuml"] = "252";
entityToCharacterMap["&yacute"] = "253";
entityToCharacterMap["&thorn"] = "254";
entityToCharacterMap["&yuml"] = "255";
entityToCharacterMap["&OElig"] = "338";
entityToCharacterMap["&oelig"] = "339";
entityToCharacterMap["&Scaron"] = "352";
entityToCharacterMap["&scaron"] = "353";
entityToCharacterMap["&Yuml"] = "376";
entityToCharacterMap["&fnof"] = "402";
entityToCharacterMap["&circ"] = "710";
entityToCharacterMap["&tilde"] = "732";
entityToCharacterMap["&Alpha"] = "913";
entityToCharacterMap["&Beta"] = "914";
entityToCharacterMap["&Gamma"] = "915";
entityToCharacterMap["&Delta"] = "916";
entityToCharacterMap["&Epsilon"] = "917";
entityToCharacterMap["&Zeta"] = "918";
entityToCharacterMap["&Eta"] = "919";
entityToCharacterMap["&Theta"] = "920";
entityToCharacterMap["&Iota"] = "921";
entityToCharacterMap["&Kappa"] = "922";
entityToCharacterMap["&Lambda"] = "923";
entityToCharacterMap["&Mu"] = "924";
entityToCharacterMap["&Nu"] = "925";
entityToCharacterMap["&Xi"] = "926";
entityToCharacterMap["&Omicron"] = "927";
entityToCharacterMap["&Pi"] = "928";
entityToCharacterMap["&Rho"] = "929";
entityToCharacterMap["&Sigma"] = "931";
entityToCharacterMap["&Tau"] = "932";
entityToCharacterMap["&Upsilon"] = "933";
entityToCharacterMap["&Phi"] = "934";
entityToCharacterMap["&Chi"] = "935";
entityToCharacterMap["&Psi"] = "936";
entityToCharacterMap["&Omega"] = "937";
entityToCharacterMap["&alpha"] = "945";
entityToCharacterMap["&beta"] = "946";
entityToCharacterMap["&gamma"] = "947";
entityToCharacterMap["&delta"] = "948";
entityToCharacterMap["&epsilon"] = "949";
entityToCharacterMap["&zeta"] = "950";
entityToCharacterMap["&eta"] = "951";
entityToCharacterMap["&theta"] = "952";
entityToCharacterMap["&iota"] = "953";
entityToCharacterMap["&kappa"] = "954";
entityToCharacterMap["&lambda"] = "955";
entityToCharacterMap["&mu"] = "956";
entityToCharacterMap["&nu"] = "957";
entityToCharacterMap["&xi"] = "958";
entityToCharacterMap["&omicron"] = "959";
entityToCharacterMap["&pi"] = "960";
entityToCharacterMap["&rho"] = "961";
entityToCharacterMap["&sigmaf"] = "962";
entityToCharacterMap["&sigma"] = "963";
entityToCharacterMap["&tau"] = "964";
entityToCharacterMap["&upsilon"] = "965";
entityToCharacterMap["&phi"] = "966";
entityToCharacterMap["&chi"] = "967";
entityToCharacterMap["&psi"] = "968";
entityToCharacterMap["&omega"] = "969";
entityToCharacterMap["&thetasym"] = "977";
entityToCharacterMap["&upsih"] = "978";
entityToCharacterMap["&piv"] = "982";
entityToCharacterMap["&ensp"] = "8194";
entityToCharacterMap["&emsp"] = "8195";
entityToCharacterMap["&thinsp"] = "8201";
entityToCharacterMap["&zwnj"] = "8204";
entityToCharacterMap["&zwj"] = "8205";
entityToCharacterMap["&lrm"] = "8206";
entityToCharacterMap["&rlm"] = "8207";
entityToCharacterMap["&ndash"] = "8211";
entityToCharacterMap["&mdash"] = "8212";
entityToCharacterMap["&lsquo"] = "8216";
entityToCharacterMap["&rsquo"] = "8217";
entityToCharacterMap["&sbquo"] = "8218";
entityToCharacterMap["&ldquo"] = "8220";
entityToCharacterMap["&rdquo"] = "8221";
entityToCharacterMap["&bdquo"] = "8222";
entityToCharacterMap["&dagger"] = "8224";
entityToCharacterMap["&Dagger"] = "8225";
entityToCharacterMap["&bull"] = "8226";
entityToCharacterMap["&hellip"] = "8230";
entityToCharacterMap["&permil"] = "8240";
entityToCharacterMap["&prime"] = "8242";
entityToCharacterMap["&Prime"] = "8243";
entityToCharacterMap["&lsaquo"] = "8249";
entityToCharacterMap["&rsaquo"] = "8250";
entityToCharacterMap["&oline"] = "8254";
entityToCharacterMap["&frasl"] = "8260";
entityToCharacterMap["&euro"] = "8364";
entityToCharacterMap["&image"] = "8365";
entityToCharacterMap["&weierp"] = "8472";
entityToCharacterMap["&real"] = "8476";
entityToCharacterMap["&trade"] = "8482";
entityToCharacterMap["&alefsym"] = "8501";
entityToCharacterMap["&larr"] = "8592";
entityToCharacterMap["&uarr"] = "8593";
entityToCharacterMap["&rarr"] = "8594";
entityToCharacterMap["&darr"] = "8595";
entityToCharacterMap["&harr"] = "8596";
entityToCharacterMap["&crarr"] = "8629";
entityToCharacterMap["&lArr"] = "8656";
entityToCharacterMap["&uArr"] = "8657";
entityToCharacterMap["&rArr"] = "8658";
entityToCharacterMap["&dArr"] = "8659";
entityToCharacterMap["&hArr"] = "8660";
entityToCharacterMap["&forall"] = "8704";
entityToCharacterMap["&part"] = "8706";
entityToCharacterMap["&exist"] = "8707";
entityToCharacterMap["&empty"] = "8709";
entityToCharacterMap["&nabla"] = "8711";
entityToCharacterMap["&isin"] = "8712";
entityToCharacterMap["&notin"] = "8713";
entityToCharacterMap["&ni"] = "8715";
entityToCharacterMap["&prod"] = "8719";
entityToCharacterMap["&sum"] = "8721";
entityToCharacterMap["&minus"] = "8722";
entityToCharacterMap["&lowast"] = "8727";
entityToCharacterMap["&radic"] = "8730";
entityToCharacterMap["&prop"] = "8733";
entityToCharacterMap["&infin"] = "8734";
entityToCharacterMap["&ang"] = "8736";
entityToCharacterMap["&and"] = "8743";
entityToCharacterMap["&or"] = "8744";
entityToCharacterMap["&cap"] = "8745";
entityToCharacterMap["&cup"] = "8746";
entityToCharacterMap["&int"] = "8747";
entityToCharacterMap["&there4"] = "8756";
entityToCharacterMap["&sim"] = "8764";
entityToCharacterMap["&cong"] = "8773";
entityToCharacterMap["&asymp"] = "8776";
entityToCharacterMap["&ne"] = "8800";
entityToCharacterMap["&equiv"] = "8801";
entityToCharacterMap["&le"] = "8804";
entityToCharacterMap["&ge"] = "8805";
entityToCharacterMap["&sub"] = "8834";
entityToCharacterMap["&sup"] = "8835";
entityToCharacterMap["&nsub"] = "8836";
entityToCharacterMap["&sube"] = "8838";
entityToCharacterMap["&supe"] = "8839";
entityToCharacterMap["&oplus"] = "8853";
entityToCharacterMap["&otimes"] = "8855";
entityToCharacterMap["&perp"] = "8869";
entityToCharacterMap["&sdot"] = "8901";
entityToCharacterMap["&lceil"] = "8968";
entityToCharacterMap["&rceil"] = "8969";
entityToCharacterMap["&lfloor"] = "8970";
entityToCharacterMap["&rfloor"] = "8971";
entityToCharacterMap["&lang"] = "9001";
entityToCharacterMap["&rang"] = "9002";
entityToCharacterMap["&loz"] = "9674";
entityToCharacterMap["&spades"] = "9824";
entityToCharacterMap["&clubs"] = "9827";
entityToCharacterMap["&hearts"] = "9829";
entityToCharacterMap["&diams"] = "9830";
var characterToEntityMap = [];
for(var entity in entityToCharacterMap) {
	characterToEntityMap[entityToCharacterMap[entity]] = entity
}
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.HTMLEntityCodec = function() {
	var f = new org.owasp.esapi.codecs.Codec();
	var a = function(g) {
		var h = g.peek();
		if(h == null) {
			return null
		}
		if(h == "x" || h == "X") {
			g.next();
			return d(g)
		}
		return e(g)
	};
	var e = function(g) {
		var h = "";
		while(g.hasNext()) {
			var j = g.peek();
			if(j.match(/[0-9]/)) {
				h += j;
				g.next()
			} else {
				if(j == ";") {
					g.next();
					break
				} else {
					break
				}
			}
		}
		try {
			return parseInt(h)
		} catch(i) {
			return null
		}
	};
	var d = function(g) {
		var h = "";
		while(g.hasNext()) {
			var j = g.peek();
			if(j.match(/[0-9A-Fa-f]/)) {
				h += j;
				g.next()
			} else {
				if(j == ";") {
					g.next();
					break
				} else {
					break
				}
			}
		}
		try {
			return parseInt(h, 16)
		} catch(i) {
			return null
		}
	};
	var b = function(h) {
		var g = "";
		while(h.hasNext()) {
			var i = h.peek();
			if(i.match(/[A-Za-z]/)) {
				g += i;
				h.next();
				if(entityToCharacterMap.containsKey("&" + g)) {
					if(h.peek(";")) {
						h.next()
					}
					break
				}
			} else {
				if(i == ";") {
					h.next()
				} else {
					break
				}
			}
		}
		return String.fromCharCode(entityToCharacterMap.getCaseInsensitive("&" + g))
	};
	return {
		encode: f.encode,
		decode: f.decode,
		encodeCharacter: function(h, k) {
			if(h.contains(k)) {
				return k
			}
			var i = org.owasp.esapi.codecs.Codec.getHexForNonAlphanumeric(k);
			if(i == null) {
				return k
			}
			var j = k.charCodeAt(0);
			if((j <= 31 && k != "\t" && k != "\n" && k != "\r") || (j >= 127 && j <= 159) || k == " ") {
				return " "
			}
			var g = characterToEntityMap[j];
			if(g != null) {
				return g + ";"
			}
			return "&#x" + i + ";"
		},
		decodeCharacter: function(k) {
			var g = k;
			g.mark();
			var i = g.next();
			if(i == null || i != "&") {
				g.reset();
				return null
			}
			var h = g.next();
			if(h == null) {
				g.reset();
				return null
			}
			if(h == "#") {
				var j = a(g);
				if(j != null) {
					return j
				}
			} else {
				if(h.match(/[A-Za-z]/)) {
					g.pushback(h);
					j = b(g);
					if(j != null) {
						return j
					}
				}
			}
			g.reset();
			return null
		}
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.JavascriptCodec = function() {
	var a = new org.owasp.esapi.codecs.Codec();
	return {
		encode: function(f, h) {
			var d = "";
			for(var b = 0; b < h.length; b++) {
				var g = h.charAt(b);
				if(f.contains(g)) {
					d += g
				} else {
					var i = org.owasp.esapi.codecs.Codec.getHexForNonAlphanumeric(g);
					if(i == null) {
						d += g
					} else {
						var e = g.charCodeAt(0).toString(16);
						if(g.charCodeAt(0) < 256) {
							var j = "00".substr(e.length);
							d += "\\x" + j + e.toUpperCase()
						} else {
							j = "0000".substr(e.length);
							d += "\\u" + j + e.toUpperCase()
						}
					}
				}
			}
			return d
		},
		decode: a.decode,
		decodeCharacter: function(p) {
			p.mark();
			var k = p.next();
			if(k == null) {
				p.reset();
				return null
			}
			if(k != "\\") {
				p.reset();
				return null
			}
			var b = p.next();
			if(b == null) {
				p.reset();
				return null
			}
			if(b == "b") {
				return 8
			} else {
				if(b == "t") {
					return 9
				} else {
					if(b == "n") {
						return 10
					} else {
						if(b == "v") {
							return 11
						} else {
							if(b == "f") {
								return 12
							} else {
								if(b == "r") {
									return 13
								} else {
									if(b == '"') {
										return 34
									} else {
										if(b == "'") {
											return 39
										} else {
											if(b == "\\") {
												return 92
											} else {
												if(b.toLowerCase() == "x") {
													h = "";
													for(var j = 0; j < 2; j++) {
														var m = p.nextHex();
														if(m != null) {
															h += m
														} else {
															input.reset();
															return null
														}
													}
													try {
														d = parseInt(h, 16);
														return String.fromCharCode(d)
													} catch(l) {
														p.reset();
														return null
													}
												} else {
													if(b.toLowerCase() == "u") {
														h = "";
														for(j = 0; j < 4; j++) {
															m = p.nextHex();
															if(m != null) {
																h += m
															} else {
																input.reset();
																return null
															}
														}
														try {
															var d = parseInt(h, 16);
															return String.fromCharCode(d)
														} catch(l) {
															p.reset();
															return null
														}
													} else {
														if(p.isOctalDigit(b)) {
															var h = b;
															var g = p.next();
															if(!p.isOctalDigit(g)) {
																p.pushback(g)
															} else {
																h += g;
																var f = p.next();
																if(!p.isOctalDigit(f)) {
																	p.pushback(f)
																} else {
																	h += f
																}
															}
															try {
																d = parseInt(h, 8);
																return String.fromCharCode(d)
															} catch(l) {
																p.reset();
																return null
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
			return b
		}
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.PercentCodec = function() {
	var e = new org.owasp.esapi.codecs.Codec();
	var d = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	var b = "-._~";
	var a = true;
	var g = d + (a ? "" : b);
	var f = function(h) {
		var i = "";
		if(h < -128 || h > 127) {
			throw new IllegalArgumentException("b is not a byte (was " + h + ")")
		}
		h &= 255;
		if(h < 16) {
			i += "0"
		}
		return i + h.toString(16).toUpperCase()
	};
	return {
		encode: e.encode,
		decode: e.decode,
		encodeCharacter: function(k, l) {
			if(g.indexOf(l) > -1) {
				return l
			}
			var i = org.owasp.esapi.codecs.UTF8.encode(l);
			var j = "";
			for(var h = 0; h < i.length; h++) {
				j += "%" + f(i.charCodeAt(h))
			}
			return j
		},
		decodeCharacter: function(q) {
			q.mark();
			var l = q.next();
			if(l == null || l != "%") {
				q.reset();
				return null
			}
			var h = "";
			for(var j = 0; j < 2; j++) {
				var p = q.nextHex();
				if(p != null) {
					h += p
				}
			}
			if(h.length == 2) {
				try {
					var m = parseInt(h, 16);
					return String.fromCharCode(m)
				} catch(k) {}
			}
			q.reset();
			return null
		}
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.PushbackString = function(b) {
	var e = b,
		g = "",
		a = "",
		f = 0,
		d = 0;
	return {
		pushback: function(h) {
			g = h
		},
		index: function() {
			return f
		},
		hasNext: function() {
			if(g != null) {
				return true
			}
			return !(e == null || e.length == 0 || f >= e.length)
		},
		next: function() {
			if(g != null) {
				var h = g;
				g = null;
				return h
			}
			if(e == null || e.length == 0 || f >= e.length) {
				return null
			}
			return e.charAt(f++)
		},
		nextHex: function() {
			var h = this.next();
			if(this.isHexDigit(h)) {
				return h
			}
			return null
		},
		nextOctal: function() {
			var h = this.next();
			if(this.isOctalDigit(h)) {
				return h
			}
			return null
		},
		isHexDigit: function(h) {
			return h != null && ((h >= "0" && h <= "9") || (h >= "a" && h <= "f") || (h >= "A" && h <= "F"))
		},
		isOctalDigit: function(h) {
			return h != null && (h >= "0" && h <= "7")
		},
		peek: function(h) {
			if(!h) {
				if(g != null) {
					return g
				}
				if(e == null || e.length == 0 || f >= e.length) {
					return null
				}
				return e.charAt(f)
			} else {
				if(g != null && g == h) {
					return true
				}
				if(e == null || e.length == 0 || f >= e.length) {
					return false
				}
				return e.charAt(f) == h
			}
		},
		mark: function() {
			a = g;
			d = f
		},
		reset: function() {
			g = a;
			f = d
		},
		remainder: function() {
			var h = e.substr(f);
			if(g != null) {
				h = g + h
			}
			return h
		}
	}
};
$namespace("org.owasp.esapi.codecs");
org.owasp.esapi.codecs.UTF8 = {
	encode: function(d) {
		var b = d.replace(/\r\n/g, "\n");
		var a = "";
		for(var f = 0; f < b.length; f++) {
			var e = b.charCodeAt(f);
			if(e < 128) {
				a += String.fromCharCode(e)
			} else {
				if((e > 127) && (e < 2048)) {
					a += String.fromCharCode((e >> 6) | 192);
					a += String.fromCharCode((e & 63) | 128)
				} else {
					a += String.fromCharCode((e >> 12) | 224);
					a += String.fromCharCode(((e >> 6) & 63) | 128);
					a += String.fromCharCode((e & 63) | 128)
				}
			}
		}
		return a
	},
	decode: function(d) {
		var a = "";
		var b = c = c1 = c2 = 0;
		while(b < d.length) {
			c = d.charCodeAt(b);
			if(c < 128) {
				a += String.fromCharCode(c);
				b++
			} else {
				if((c > 191) && (c < 224)) {
					c2 = d.charCodeAt(b + 1);
					a += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					b += 2
				} else {
					c2 = utftext.charCodeAt(b + 1);
					c3 = utftext.charCodeAt(b + 2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					b += 3
				}
			}
		}
		return a
	}
};
$namespace("org.owasp.esapi.i18n");
org.owasp.esapi.i18n.ArrayResourceBundle = function(sName, oLocale, aMessages, oParent) {
	with(org.owasp.esapi.i18n) {
		var _super = new ResourceBundle(sName, oLocale, oParent)
	}
	var messages = aMessages;
	return {
		getParent: _super.getParent,
		getLocale: _super.getLocale,
		getName: _super.getName,
		getString: _super.getString,
		getMessage: function(sKey) {
			return messages[sKey]
		}
	}
};
$namespace("org.owasp.esapi.i18n");
org.owasp.esapi.i18n.Locale = function(f, d, a) {
	var g = f,
		e = d,
		b = a;
	return {
		getLanguage: function() {
			return g
		},
		getCountry: function() {
			return e
		},
		getVariant: function() {
			return b
		},
		toString: function() {
			return g + (e ? "-" + e + (b ? "-" + b : "") : "")
		}
	}
};
org.owasp.esapi.i18n.Locale.US = new org.owasp.esapi.i18n.Locale("en", "US");
org.owasp.esapi.i18n.Locale.GB = new org.owasp.esapi.i18n.Locale("en", "GB");
org.owasp.esapi.i18n.Locale.getLocale = function(b) {
	var a = b.split("-");
	return new org.owasp.esapi.i18n.Locale(a[0], (a.length > 1 ? a[1] : ""), (a.length > 2 ? a.length[2] : ""))
};
org.owasp.esapi.i18n.Locale.getDefault = function() {
	var a = (navigator.language ? navigator.language : (navigator.userLanguage ? navigator.userLanguage : "en-US")).split("-");
	return new org.owasp.esapi.i18n.Locale(a[0], (a.length > 1 ? a[1] : ""), (a.length > 2 ? a.length[2] : ""))
};
$namespace("org.owasp.esapi.i18n");
org.owasp.esapi.i18n.ObjectResourceBundle = function(e, d) {
	var b = new org.owasp.esapi.i18n.ResourceBundle(e.name, org.owasp.esapi.i18n.Locale.getLocale(e.locale), d);
	var a = e.messages;
	return {
		getParent: b.getParent,
		getLocale: b.getLocale,
		getName: b.getName,
		getString: b.getString,
		getMessage: function(f) {
			return a[f]
		}
	}
};
$namespace("org.owasp.esapi.i18n");
org.owasp.esapi.i18n.ResourceBundle = function(g, e, b) {
	var f = b;
	var a = e;
	var d = g;
	if(!d) {
		throw new SyntaxError("Name required for implementations of org.owasp.esapi.i18n.ResourceBundle")
	}
	if(!a) {
		throw new SyntaxError("Locale required for implementations of org.owasp.esapi.i18n.ResourceBundle")
	}
	return {
		getParent: function() {
			return f
		},
		getLocale: function() {
			return a
		},
		getName: function() {
			return d
		},
		getMessage: function(h) {
			return h
		},
		getString: function(l, p) {
			if(arguments.length < 1) {
				throw new IllegalArgumentException("No key passed to getString")
			}
			var m = this.getMessage(l);
			if(!m) {
				if(f) {
					return f.getString(l, p)
				} else {
					return l
				}
			}
			if(!m.match(/\{([A-Za-z]+)\}/) || !p) {
				return m
			}
			var h = "",
				n = 0;
			while(true) {
				var j = m.indexOf("{", n);
				var k = m.indexOf("}", j);
				if(j < 0) {
					h += m.substr(n, m.length - n);
					break
				}
				if(j >= 0 && k < -1) {
					throw new SyntaxError("Invalid Message - Unclosed Context Reference: " + m)
				}
				h += m.substring(n, j);
				var i = m.substring(j + 1, k);
				if(p[i]) {
					h += p[i]
				} else {
					h += m.substring(j, k + 1)
				}
				n = k + 1
			}
			return h
		}
	}
};
org.owasp.esapi.i18n.ResourceBundle.getResourceBundle = function(sResource, oLocale) {
	var classname = sResource + "_" + oLocale.toString().replace("-", "_");
	with(org.owasp.esapi.i18n) {
		if(ResourceBundle[classname] instanceof Object) {
			return ResourceBundle[classname]
		} else {
			return new ResourceBundle[classname]()
		}
	}
};
$namespace("org.owasp.esapi.net");
org.owasp.esapi.net.Cookie = function(g, n) {
	var b;
	var m;
	var h;
	var f;
	var l;
	var p;
	var a;
	var k;
	var d = $ESAPI.resourceBundle();
	var i = ",; ";
	var e = function(u) {
		for(var r = 0, q = u.length; r < q; r++) {
			var t = u.charCodeAt(r),
				s = u.charAt(r);
			if(t < 32 || t >= 127 || i.indexOf(s) != -1) {
				return false
			}
		}
		return true
	};
	if(!e(g) || g.toLowerCase() == "comment" || g.toLowerCase() == "discard" || g.toLowerCase() == "domain" || g.toLowerCase() == "expires" || g.toLowerCase() == "max-age" || g.toLowerCase() == "path" || g.toLowerCase() == "secure" || g.toLowerCase() == "version" || g.charAt(0) == "$") {
		var j = d.getString("Cookie.Name", {
			name: g
		});
		throw new IllegalArgumentException(j)
	}
	b = g;
	m = n;
	return {
		setComment: function(q) {
			h = q
		},
		getComment: function() {
			return h
		},
		setDomain: function(q) {
			f = q.toLowerCase()
		},
		getDomain: function() {
			return f
		},
		setMaxAge: function(q) {
			l = q
		},
		getMaxAge: function() {
			return l
		},
		setPath: function(q) {
			p = q
		},
		getPath: function() {
			return p
		},
		setSecure: function(q) {
			a = q
		},
		getSecure: function() {
			return a
		},
		getName: function() {
			return b
		},
		setValue: function(q) {
			m = q
		},
		getValue: function() {
			return m
		},
		setVersion: function(q) {
			if(q < 0 || q > 1) {
				throw new IllegalArgumentException(d.getString("Cookie.Version", {
					version: q
				}))
			}
			k = q
		},
		getVersion: function() {
			return k
		}
	}
};
$namespace("org.owasp.esapi.reference.encoding");
org.owasp.esapi.reference.encoding.DefaultEncoder = function(a) {
	var h = [],
		k = new org.owasp.esapi.codecs.HTMLEntityCodec(),
		f = new org.owasp.esapi.codecs.JavascriptCodec(),
		g = new org.owasp.esapi.codecs.CSSCodec(),
		b = new org.owasp.esapi.codecs.PercentCodec();
	if(!a) {
		h.push(k);
		h.push(f);
		h.push(g);
		h.push(b)
	} else {
		h = a
	}
	var e = new Array(",", ".", "-", "_", " ");
	var d = new Array(",", ".", "-", "_");
	var j = new Array();
	var i = new Array(",", ".", "_");
	return {
		cananicalize: function(r, m) {
			if(!r) {
				return null
			}
			var l = r,
				p = null,
				s = 1,
				n = 0,
				q = false;
			while(!q) {
				q = true;
				h.each(function(u) {
					var t = l;
					l = u.decode(l);
					if(t != l) {
						if(p != null && p != u) {
							s++
						}
						p = u;
						if(q) {
							n++
						}
						q = false
					}
				})
			}
			if(n >= 2 && s > 1) {
				if(m) {
					throw new org.owasp.esapi.IntrusionException("Input validation failure", "Multiple (" + n + "x) and mixed encoding (" + s + "x) detected in " + r)
				}
			} else {
				if(n >= 2) {
					if(m) {
						throw new org.owasp.esapi.IntrusionException("Input validation failure", "Multiple (" + n + "x) encoding detected in " + r)
					}
				} else {
					if(s > 1) {
						if(m) {
							throw new org.owasp.esapi.IntrusionException("Input validation failure", "Mixed (" + s + "x) encoding detected in " + r)
						}
					}
				}
			}
			return l
		},
		normalize: function(l) {
			return l.replace(/[^\x00-\x7F]/g, "")
		},
		encodeForHTML: function(l) {
			return !l ? null : k.encode(e, l)
		},
		decodeForHTML: function(l) {
			return !l ? null : k.decode(l)
		},
		encodeForHTMLAttribute: function(l) {
			return !l ? null : k.encode(d, l)
		},
		encodeForCSS: function(l) {
			return !l ? null : g.encode(j, l)
		},
		encodeForJavaScript: function(l) {
			return !l ? null : f.encode(i, l)
		},
		encodeForJavascript: this.encodeForJavaScript,
		encodeForURL: function(l) {
			return !l ? null : escape(l)
		},
		decodeFromURL: function(l) {
			return !l ? null : unescape(l)
		},
		encodeForBase64: function(l) {
			return !l ? null : org.owasp.esapi.codecs.Base64.encode(l)
		},
		decodeFromBase64: function(l) {
			return !l ? null : org.owasp.esapi.codecs.Base64.decode(l)
		}
	}
};
$namespace("org.owasp.esapi.reference.logging");
org.owasp.esapi.reference.logging.Log4JSLogFactory = function() {
	var d = Array();
	var b = function(m) {
		var f = null;
		var e = m ? m : null;
		var k = Log4js.Level;
		var i = false,
			j = false,
			l = false,
			h = $ESAPI.encoder().encodeForHTML;
		f = Log4js.getLogger(e);
		var g = function(p) {
			var n = org.owasp.esapi.Logger;
			switch(p) {
				case n.OFF:
					return Log4js.Level.OFF;
				case n.FATAL:
					return Log4js.Level.FATAL;
				case n.ERROR:
					return Log4js.Level.ERROR;
				case n.WARNING:
					return Log4js.Level.WARN;
				case n.INFO:
					return Log4js.Level.INFO;
				case n.DEBUG:
					return Log4js.Level.DEBUG;
				case n.TRACE:
					return Log4js.Level.TRACE;
				case n.ALL:
					return Log4js.Level.ALL
			}
		};
		return {
			setLevel: function(n) {
				try {
					f.setLevel(g(n))
				} catch(p) {
					this.error(org.owasp.esapi.Logger.SECURITY_FAILURE, "", p)
				}
			},
			trace: function(p, n, q) {
				this.log(k.TRACE, p, n, q)
			},
			debug: function(p, n, q) {
				this.log(k.DEBUG, p, n, q)
			},
			info: function(p, n, q) {
				this.log(k.INFO, p, n, q)
			},
			warning: function(p, n, q) {
				this.log(k.WARN, p, n, q)
			},
			error: function(p, n, q) {
				this.log(k.ERROR, p, n, q)
			},
			fatal: function(p, n, q) {
				this.log(k.FATAL, p, n, q)
			},
			log: function(s, r, p, t) {
				switch(s) {
					case k.TRACE:
						if(!f.isTraceEnabled()) {
							return
						}
						break;
					case k.DEBUG:
						if(!f.isDebugEnabled()) {
							return
						}
						break;
					case k.INFO:
						if(!f.isInfoEnabled()) {
							return
						}
						break;
					case k.WARNING:
						if(!f.isWarnEnabled()) {
							return
						}
						break;
					case k.ERROR:
						if(!f.isErrorEnabled()) {
							return
						}
						break;
					case k.FATAL:
						if(!f.isFatalEnabled()) {
							return
						}
						break
				}
				if(!p) {
					p = ""
				}
				p = "[" + r.toString() + "] - " + p;
				var n = p.replace("\n", "_").replace("\r", "_");
				if(l) {
					n = h(n);
					if(n != p) {
						n += " [Encoded]"
					}
				}
				var q = (i ? window.location.href : "") + (j ? "/" + $ESAPI.properties.application.Name : "");
				f.log(s, (q != "" ? "[" + q + "] " : "") + n, t)
			},
			addAppender: function(n) {
				f.addAppender(n)
			},
			isLogUrl: function() {
				return i
			},
			setLogUrl: function(n) {
				i = n
			},
			isLogApplicationName: function() {
				return j
			},
			setLogApplicationName: function(n) {
				j = n
			},
			isEncodingRequired: function() {
				return l
			},
			setEncodingRequired: function(n) {
				l = n
			},
			setEncodingFunction: function(n) {
				h = n
			},
			isDebugEnabled: function() {
				return f.isDebugEnabled()
			},
			isErrorEnabled: function() {
				return f.isErrorEnabled()
			},
			isFatalEnabled: function() {
				return f.isFatalEnabled()
			},
			isInfoEnabled: function() {
				return f.isInfoEnabled()
			},
			isTraceEnabled: function() {
				return f.isTraceEnabled()
			},
			isWarningEnabled: function() {
				return f.isWarnEnabled()
			}
		}
	};
	var a = function(f) {
		var e = $ESAPI.properties.logging;
		if(e[f]) {
			e = e[f]
		}
		return e
	};
	return {
		getLogger: function(g) {
			var h = (typeof g == "string") ? g : g.constructor.toString();
			var f = d[h];
			if(!f) {
				f = new b(h);
				var e = a(g);
				f.setLevel(e.Level);
				f.setLogUrl(e.LogUrl);
				f.setLogApplicationName(e.LogApplicationName);
				f.setEncodingRequired(e.EncodingRequired);
				if(e.EncodingFunction) {
					f.setEncodingFunction(e.EncodingFunction)
				}
				e.Appenders.each(function(i) {
					if(e.Layout) {
						i.setLayout(e.Layout)
					}
					f.addAppender(i)
				});
				d[h] = f
			}
			return f
		}
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.BaseValidationRule = function(f, h, a) {
	var g = $ESAPI.logger("Validation");
	var b = org.owasp.esapi.Logger.EventType;
	var i = f;
	var j = h ? h : $ESAPI.encoder();
	var l = false;
	var e = org.owasp.esapi.i18n.ResourceBundle;
	var k = a ? a : $ESAPI.locale();
	var d;
	if($ESAPI.properties.validation.ResourceBundle) {
		d = e.getResourceBundle($ESAPI.properties.validation.ResourceBundle, k)
	}
	if(!d) {
		d = $ESAPI.resourceBundle();
		g.info(b.EVENT_FAILURE, "No Validation ResourceBundle - Defaulting to " + d.getName() + "(" + d.getLocale().toString() + ")")
	}
	g.info(b.EVENT_SUCCESS, "Validation Rule Initialized with ResourceBundle: " + d.getName());
	return {
		setAllowNull: function(m) {
			l = m
		},
		isAllowNull: function() {
			return l
		},
		getTypeName: function() {
			return i
		},
		setTypeName: function(m) {
			i = m
		},
		setEncoder: function(m) {
			j = m
		},
		getEncoder: function() {
			return j
		},
		assertValid: function(m, n) {
			this.getValid(m, n)
		},
		getValid: function(m, p, r) {
			var q = null;
			try {
				q = this.getValidInput(m, p)
			} catch(n) {
				return this.sanitize(m, p)
			}
			return q
		},
		getValidInput: function(m, n) {
			return n
		},
		getSafe: function(m, p) {
			var q = null;
			try {
				q = this.getValidInput(m, p)
			} catch(n) {
				return this.sanitize(m, p)
			}
			return q
		},
		sanitize: function(m, n) {
			return n
		},
		isValid: function(m, p) {
			var q = false;
			try {
				this.getValidInput(m, p);
				q = true
			} catch(n) {
				return false
			}
			return q
		},
		whitelist: function(n, p) {
			var q = "";
			for(var m = 0; m < n.length; m++) {
				var r = n.charAt(m);
				if(p.contains(r)) {
					q += r
				}
			}
			return q
		},
		getUserMessage: function(p, m, n) {
			return this.getMessage(p + ".Usr", m + ".Usr", n)
		},
		getLogMessage: function(p, m, n) {
			return this.getMessage(p + ".Log", m + ".Log", n)
		},
		getMessage: function(p, m, n) {
			return d.getString(p, n) ? d.getString(p, n) : d.getString(m, n)
		},
		validationException: function(p, m, q, n) {
			throw new org.owasp.esapi.reference.validation.ValidationException(this.getUserMessage(p + "." + q, m + "." + q, n), this.getLogMessage(p + "." + q, m + "." + q, n), p)
		}
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.CreditCardValidationRule = function(b, f, a) {
	var j = new org.owasp.esapi.reference.validation.BaseValidationRule(b, f, a);
	var h = "CreditCard";
	var d = 19;
	var g;
	var e = function() {
		var l = new RegExp($ESAPI.properties.validation.CreditCard);
		var k = new org.owasp.esapi.reference.validation.StringValidationRule("ccrule", j.getEncoder(), a, l);
		k.setMaxLength(d);
		k.setAllowNull(false);
		return k
	};
	ccRule = e();
	var i = function(k) {
		var s = "";
		var q;
		for(var n = 0; o < k.length; n++) {
			q = k.charAt(n);
			if(q.match(/[0-9]/)) {
				s += q
			}
		}
		var p = 0,
			r = 0,
			l = 0,
			t = false;
		for(var m = s.length - 1; m >= 0; m--) {
			r = parseInt(s.substring(m, n + 1));
			if(t) {
				l = r * 2;
				if(l > 9) {
					l -= 9
				}
			} else {
				l = r
			}
			p += l;
			t = !t
		}
		return p % 10 == 0
	};
	return {
		getMaxCardLength: function() {
			return d
		},
		setMaxCardLength: function(k) {
			d = k
		},
		setAllowNull: j.setAllowNull,
		isAllowNull: j.isAllowNull,
		getTypeName: j.getTypeName,
		setTypeName: j.setTypeName,
		setEncoder: j.setEncoder,
		getEncoder: j.getEncoder,
		assertValid: j.assertValid,
		getValid: j.getValid,
		getValidInput: function(l, m) {
			if(!m || m.trim() == "") {
				if(this.isAllowNull()) {
					return null
				}
				j.validationException(l, h, "Required", {
					context: l,
					input: m
				})
			}
			var k = g.getValid(l, m);
			if(!i(k)) {
				j.validationException(l, h, "Invalid", {
					context: l,
					input: m
				})
			}
			return k
		},
		getSafe: j.getSafe,
		sanitize: function(k, l) {
			return this.whitelist(l, org.owasp.esapi.EncoderConstants.CHAR_DIGITS)
		},
		isValid: j.isValid,
		whitelist: j.whitelist
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.DateValidationRule = function(a, d, b) {
	var f = new org.owasp.esapi.reference.validation.BaseValidationRule(a, d, b);
	var h = "Date";
	var g = DateFormat.getDateInstance();
	var e = function(j, k) {
		if(!j || j.trim() == "") {
			if(f.isAllowNull()) {
				return null
			}
			f.validationException(j, h, "Required", {
				context: j,
				input: k,
				format: g
			})
		}
		var i = f.getEncoder().cananicalize(k);
		try {
			return g.parse(i)
		} catch(l) {
			f.validationException(j, h, "Invalid", {
				context: j,
				input: k,
				format: g
			})
		}
	};
	return {
		setDateFormat: function(i) {
			if(!i) {
				throw new IllegalArgumentException("DateValidationRule.setDateFormat requires a non-null DateFormat")
			}
			g = i
		},
		setAllowNull: f.setAllowNull,
		isAllowNull: f.isAllowNull,
		getTypeName: f.getTypeName,
		setTypeName: f.setTypeName,
		setEncoder: f.setEncoder,
		getEncoder: f.getEncoder,
		assertValid: f.assertValid,
		getValid: f.getValid,
		getValidInput: function(i, j) {
			return e(i, j)
		},
		getSafe: f.getSafe,
		sanitize: function(i, k) {
			var j = new Date(0);
			try {
				j = e(i, k)
			} catch(l) {}
			return j
		},
		isValid: f.isValid,
		whitelist: f.whitelist
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.DefaultValidator = function(e, b) {
	var g = Array();
	var d = e ? e : $ESAPI.encoder();
	var a = b ? b : org.owasp.esapi.i18n.Locale.getDefault();
	var f = org.owasp.esapi.reference.validation;
	return {
		addRule: function(h) {
			g[h.getName()] = h
		},
		getRule: function(h) {
			return g[h]
		},
		isValidInput: function(h, k, m, j, i) {
			try {
				this.getValidInput(h, k, m, j, i);
				return true
			} catch(l) {
				return false
			}
		},
		getValidInput: function(i, q, h, l, k, r) {
			var n = new org.owasp.esapi.reference.validation.StringValidationRule(h, d, a);
			var j = new RegExp($ESAPI.properties.validation[h]);
			if(j && j instanceof RegExp) {
				n.addWhitelistPattern(j)
			} else {
				throw new IllegalArgumentException("Invalid Type: " + h + " not found.")
			}
			n.setMaxLength(l);
			n.setAllowNull(k);
			try {
				return n.getValid(i, q)
			} catch(m) {
				if(m instanceof j.ValidationErrorList && r) {
					r.addError(i, m)
				}
				throw m
			}
		},
		isValidDate: function(i, k, h, j) {
			try {
				this.getValidDate(i, k, h, j);
				return true
			} catch(l) {
				return false
			}
		},
		getValidDate: function(i, k, h, j, n) {
			var l = new f.DateValidationRule(i, d, a);
			l.setAllowNull(j);
			l.setDateFormat(h);
			try {
				return l.getValid(i, k)
			} catch(m) {
				if(m instanceof f.ValidationErrorList && n) {
					n.addError(i, m)
				}
				throw m
			}
		},
		getValidCreditCard: function(h, j, i, m) {
			var k = new f.CreditCardValidationRule(h, d, a);
			k.setAllowNull(i);
			try {
				return k.getValid(h, j)
			} catch(l) {
				if(l instanceof f.ValidationErrorList && m) {
					m.addError(h, l)
				}
				throw l
			}
		},
		isValidCreditCard: function(h, j, i) {
			try {
				this.getValidCreditCard(h, j, i);
				return true
			} catch(k) {
				return false
			}
		},
		getValidNumber: function(i, k, j, n, p, m) {
			var h = new f.NumberValidationRule(i, d, a, n, p);
			h.setAllowNull(j);
			try {
				return h.getValid(i, k)
			} catch(l) {
				if(l instanceof f.ValidationErrorList && m) {
					m.addError(i, l)
				}
				throw l
			}
		},
		isValidNumber: function(h, j, i, l, m) {
			try {
				this.getValidNumber(h, j, i, l, m);
				return true
			} catch(k) {
				return false
			}
		},
		getValidInteger: function(i, k, j, n, p, m) {
			var h = new f.IntegerValidationRule(i, d, a, n, p);
			h.setAllowNull(j);
			try {
				return h.getValid(i, k)
			} catch(l) {
				if(l instanceof f.ValidationErrorList && m) {
					m.addError(i, l)
				}
				throw l
			}
		},
		isValidInteger: function(h, j, i, l, m) {
			try {
				this.getValidInteger(h, j, i, l, m);
				return true
			} catch(k) {
				return false
			}
		}
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.IntegerValidationRule = function(b, e, a, k, h) {
	var j = new org.owasp.esapi.reference.validation.BaseValidationRule(b, e, a);
	var d = "Integer";
	var i = k ? k : Number.MIN_VALUE;
	var f = h ? h : Number.MAX_VALUE;
	if(i >= f) {
		throw new IllegalArgumentException("minValue must be less than maxValue")
	}
	var g = function(m, p) {
		if(!p || p.trim() == "") {
			if(j.allowNull()) {
				return null
			}
			j.validationException(m, d, "Required", {
				context: m,
				input: p,
				minValue: i,
				maxValue: f
			})
		}
		var l = j.getEncoder().cananicalize(p);
		var q = parseInt(l);
		if(q == "NaN") {
			j.validationException(m, d, "NaN", {
				context: m,
				input: p,
				minValue: i,
				maxValue: f
			})
		}
		if(q < i) {
			j.validationException(m, d, "MinValue", {
				context: m,
				input: p,
				minValue: i,
				maxValue: f
			})
		}
		if(q > f) {
			j.validationException(m, d, "MaxValue", {
				context: m,
				input: p,
				minValue: i,
				maxValue: f
			})
		}
		return q
	};
	return {
		setMinValue: function(l) {
			i = l
		},
		getMinValue: function() {
			return i
		},
		setMaxValue: function(l) {
			f = l
		},
		getMaxValue: function() {
			return f
		},
		setAllowNull: j.setAllowNull,
		isAllowNull: j.isAllowNull,
		getTypeName: j.getTypeName,
		setTypeName: j.setTypeName,
		setEncoder: j.setEncoder,
		getEncoder: j.getEncoder,
		assertValid: j.assertValid,
		getValid: j.getValid,
		getValidInput: function(l, m) {
			return g(l, m)
		},
		getSafe: j.getSafe,
		sanitize: function(l, m) {
			var q = 0;
			try {
				q = g(l, m)
			} catch(p) {}
			return q
		},
		isValid: j.isValid,
		whitelist: j.whitelist
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.NumberValidationRule = function(b, f, a, h, e) {
	var k = new org.owasp.esapi.reference.validation.BaseValidationRule(b, f, a);
	var d = "Number";
	var j = h ? h : Number.MIN_VALUE;
	var g = e ? e : Number.MAX_VALUE;
	if(j >= g) {
		throw new IllegalArgumentException("MinValue must be less that MaxValue")
	}
	var i = function(m, n) {
		if(!n || n.trim() == "") {
			if(k.isAllowNull()) {
				return null
			}
			k.validationException(m, d, "Required", {
				context: m,
				input: n,
				minValue: j,
				maxValue: g
			})
		}
		var l = k.getEncoder().cananicalize(n);
		var p = 0;
		try {
			p = parseFloat(l)
		} catch(q) {
			k.validationException(m, d, "Invalid", {
				context: m,
				input: n,
				minValue: j,
				maxValue: g
			})
		}
		if(p == "NaN") {
			k.validationException(m, d, "NaN", {
				context: m,
				input: n,
				minValue: j,
				maxValue: g
			})
		}
		if(p < j) {
			k.validationException(m, d, "MinValue", {
				context: m,
				input: n,
				minValue: j,
				maxValue: g
			})
		}
		if(p > g) {
			k.validationException(m, d, "MaxValue", {
				context: m,
				input: n,
				minValue: j,
				maxValue: g
			})
		}
		return p
	};
	return {
		setMinValue: function(l) {
			j = l
		},
		getMinValue: function() {
			return j
		},
		setMaxValue: function(l) {
			g = l
		},
		getMaxValue: function() {
			return g
		},
		setAllowNull: k.setAllowNull,
		isAllowNull: k.isAllowNull,
		getTypeName: k.getTypeName,
		setTypeName: k.setTypeName,
		setEncoder: k.setEncoder,
		getEncoder: k.getEncoder,
		assertValid: k.assertValid,
		getValid: k.getValid,
		getValidInput: function(l, m) {
			return i(l, m)
		},
		getSafe: k.getSafe,
		sanitize: function(l, m) {
			var q = 0;
			try {
				q = i(l, m)
			} catch(p) {}
			return q
		},
		isValid: k.isValid,
		whitelist: k.whitelist
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.StringValidationRule = function(g, l, a, p) {
	var q = new org.owasp.esapi.reference.validation.BaseValidationRule(g, l, a);
	var h = "String";
	var n = Array();
	var f = Array();
	var e = 0;
	var b = Number.MAX_VALUE;
	var m = true;
	if(p) {
		if(p instanceof String) {
			n.push(new RegExp(p))
		} else {
			if(p instanceof RegExp) {
				n.push(p)
			} else {
				throw new IllegalArgumentException("sWhiteListPattern must be a string containing RegExp or a RegExp Object")
			}
		}
	}
	var k = function(r, t, s) {
		n.each(function(u) {
			if(t.match(u)) {
				q.validationException(r, h, "Whitelist", {
					context: r,
					input: t,
					orig: s,
					pattern: u.toString(),
					minLength: e,
					maxLength: b,
					validateInputAndCanonical: m
				})
			}
		})
	};
	var j = function(r, t, s) {
		f.each(function(u) {
			if(t.match(u)) {
				q.validationException(r, h, "Blacklist", {
					context: r,
					input: t,
					orig: s,
					pattern: u.toString(),
					minLength: e,
					maxLength: b,
					validateInputAndCanonical: m
				})
			}
		})
	};
	var d = function(r, t, s) {
		if(t.length < e) {
			q.validationException(r, h, "MinLength", {
				context: r,
				input: t,
				orig: s,
				minLength: e,
				maxLength: b,
				validateInputAndCanonical: m
			})
		}
		if(t.length > b) {
			q.validationException(r, h, "MaxLength", {
				context: r,
				input: t,
				orig: s,
				minLength: e,
				maxLength: b,
				validateInputAndCanonical: m
			})
		}
		return t
	};
	var i = function(r, t, s) {
		if(!t || t.trim() == "") {
			if(q.isAllowNull()) {
				return null
			}
			q.validationException(r, h, "Required", {
				context: r,
				input: t,
				orig: s,
				minLength: e,
				maxLength: b,
				validateInputAndCanonical: m
			})
		}
	};
	return {
		addWhitelistPattern: function(r) {
			if(r instanceof String) {
				n.push(new RegExp(r))
			} else {
				if(r instanceof RegExp) {
					n.push(r)
				} else {
					throw new IllegalArgumentException("p must be a string containing RegExp or a RegExp Object")
				}
			}
		},
		addBlacklistPattern: function(r) {
			if(r instanceof String) {
				f.push(new RegExp(r))
			} else {
				if(r instanceof RegExp) {
					f.push(r)
				} else {
					throw new IllegalArgumentException("p must be a string containing RegExp or a RegExp Object")
				}
			}
		},
		setMinLength: function(r) {
			e = r
		},
		getMinLength: function() {
			return e
		},
		setMaxLength: function(r) {
			b = r
		},
		getMaxLength: function() {
			return b
		},
		setValidateInputAndCanonical: function(r) {
			m = r
		},
		isValidateInputAndCanonical: function() {
			return m
		},
		setAllowNull: q.setAllowNull,
		isAllowNull: q.isAllowNull,
		getTypeName: q.getTypeName,
		setTypeName: q.setTypeName,
		setEncoder: q.setEncoder,
		getEncoder: q.getEncoder,
		assertValid: q.assertValid,
		getValid: q.getValid,
		getValidInput: function(s, t) {
			var r = null;
			if(i(s, t) == null) {
				return null
			}
			if(m) {
				d(s, t);
				k(s, t);
				j(s, t)
			}
			r = this.getEncoder().cananicalize(t);
			if(i(s, r, t) == null) {
				return null
			}
			d(s, r, t);
			k(s, r, t);
			j(s, r, t);
			return r
		},
		getSafe: q.getSafe,
		sanitize: function(r, s) {
			return this.whitelist(s, org.owasp.esapi.EncoderConstants.CHAR_ALNUM)
		},
		isValid: q.isValid,
		whitelist: q.whitelist
	}
};
$namespace("org.owasp.esapi.reference.validation");
org.owasp.esapi.reference.validation.ValidationException = function(d, b) {
	var f, a;
	if(arguments[2] && arguments[2] instanceof Exception) {
		f = arguments[2];
		if(arguments[3] && arguments[3] instanceof String) {
			a = arguments[3]
		}
	} else {
		if(arguments[2] && arguments[2] instanceof String) {
			a = arguments[2]
		}
	}
	var e = new org.owasp.esapi.EnterpriseSecurityException(d, b, f);
	return {
		setContext: function(g) {
			a = g
		},
		getContext: function() {
			return a
		},
		getMessage: e.getMessage,
		getUserMessage: e.getMessage,
		getLogMessage: e.getLogMessage,
		getStackTrace: e.getStackTrace,
		printStackTrace: e.printStackTrace
	}
};
$namespace("Base.esapi.properties");
Base.esapi.properties = {
	application: {
		Name: "XSSEncode"
	},
	encoder: {
		Implementation: org.owasp.esapi.reference.encoding.DefaultEncoder,
		AllowMultipleEncoding: false
	}
};
ec.debug = false;
if("object" !== typeof csrfToken) {
	ol.load.define("jquery", [{
		mark: "jquery",
		uri: "base/jquery-3.5.0.min.js",
		type: "js"
	}, {
		uri: "base/jquery-migrate-1.4.1.min.js",
		type: "js"
	}, {
		uri: "base/jquery-migrate-3.1.0.min.js",
		type: "js"
	}, {
		uri: "base/helper.min.js",
		type: "js"
	}])
}
ol.load.define("jquery.form", ["jquery", {
	mark: "jquery.form",
	uri: "base/jquery.form-4.2.2.min.js",
	type: "js",
	charset: "utf-8",
	depend: true
}]);
ol.load.define("jquery.autocomplete", [{
	mark: "jquery.autocomplete",
	uri: "jquery.autocomplete/jquery.autocomplete.hack-min.js",
	type: "js",
	charset: "utf-8",
	depend: true
}]);
ol.load.define("jquery.movebar", [{
	uri: "jquery.movebar/movebar.min.js",
	type: "js"
}]);
ol.load.define("ec.dh", [{
	uri: "dh/bigInt.min.js",
	type: "js",
	depend: true
}]);
ol.load.define("ec.pager", ["jquery", {
	uri: "ec.pager/pager-min.js",
	type: "js",
	charset: "gbk",
	depend: true
}]);
ol.load.define("ajax", ["jquery.form", {
	mark: "ajax",
	uri: "base/ajax.js",
	type: "js",
	charset: "utf-8",
	depend: true
}]);
if("object" !== typeof ol.box && "function" !== typeof ol.box) {
	ol.load.define("ec.box", ["jquery", {
		uri: "ec.box/box-min.js",
		type: "js",
		depend: true
	}])
}
ol.load.define("cloud-zoom", [{
	uri: "cloud-zoom.1.0.2/cloud-zoom.1.0.2-hack-min.js",
	type: "js"
}]);
ol.load.define("RaterStar", [{
	uri: "RaterStar/rater-star.js",
	type: "js"
}]);
ol.load.define("ec.slider", [{
	uri: "ec.slider/slider-min.js",
	type: "js"
}]);
ol.load.define("ec.linkSelect.region", ["jquery", {
	uri: "linkSelect/region-min.js?20161011",
	type: "js",
	charset: "utf-8",
	depend: true
}]);
ol.load.define("jquery.rotate", ["jquery", {
	uri: "jquery.rotate/jQueryRotate-min.js",
	type: "js"
}]);
ol.load.define("jquery.fixed", ["jquery", {
	uri: "jquery.fixed/fixed.js",
	type: "js"
}]);
if("object" !== typeof ec.encodeInit && "function" !== typeof ec.encodeInit) {
	ol.load.define("ec.XSSUtils", [{
		uri: "aes/XSSUtils.min.js",
		type: "js",
		charset: "utf-8",
		depend: true,
		loadType: null
	}, {
		uri: "aes/esapi.js",
		type: "js",
		charset: "utf-8",
		depend: true,
		loadType: null
	}, {
		uri: "aes/resources/Base.esapi.properties.min.js",
		type: "js",
		charset: "utf-8",
		depend: true,
		loadType: null
	}])
}
if(jQuery) {
	ol._setLoadStatus("jquery", "complete")
}
window["_gaq"] = window["_gaq"] || [];
_gaq.push(["_setAccount", ec.debug ? "" : "UA-28046633-2", "t1"]);
var _hmt = _hmt || [];
var _paq = _paq || [];
var _zpq = _zpq || [];
var bindBox;
window._bd_share_config = {};
ec.code = {
	addAnalytics: function(options) {
		options = options || {
			google: true,
			cnzz: true,
			baidu: false,
			click99: true,
			hicloud: true,
			suning: true,
			operate: false,
			dmp: false
		};
		var filterList = ["/payment/alipay/returnURL", "/order/feedBack"],
			locationHref = location.href;
		for(var i = 0; i < filterList.length; i += 1) {
			if(locationHref.indexOf(filterList[i]) > 0) return
		}
		_gaq.push(["_trackPageview"]);
		_gaq.push(["_trackPageLoadTime"]);
		_gaq.push(["_addOrganic", "baidu", "word"]);
		_gaq.push(["_addOrganic", "baidu", "kw"]);
		_gaq.push(["_addOrganic", "opendata.baidu", "wd"]);
		_gaq.push(["_addOrganic", "zhidao.baidu", "word"]);
		_gaq.push(["_addOrganic", "news.baidu", "word"]);
		_gaq.push(["_addOrganic", "post.baidu", "kw"]);
		_gaq.push(["_addOrganic", "tieba.baidu", "kw"]);
		_gaq.push(["_addOrganic", "mp3.baidu", "word"]);
		_gaq.push(["_addOrganic", "image.baidu", "word"]);
		_gaq.push(["_addOrganic", "top.baidu", "word"]);
		_gaq.push(["_addOrganic", "news.google", "q"]);
		_gaq.push(["_addOrganic", "soso", "w"]);
		_gaq.push(["_addOrganic", "image.soso", "w"]);
		_gaq.push(["_addOrganic", "music.soso", "w"]);
		_gaq.push(["_addOrganic", "post.soso", "kw"]);
		_gaq.push(["_addOrganic", "wenwen.soso", "sp"]);
		_gaq.push(["_addOrganic", "post.soso", "kw"]);
		_gaq.push(["_addOrganic", "3721", "name"]);
		_gaq.push(["_addOrganic", "114", "kw"]);
		_gaq.push(["_addOrganic", "youdao", "q"]);
		_gaq.push(["_addOrganic", "vnet", "kw"]);
		_gaq.push(["_addOrganic", "sogou", "query"]);
		_gaq.push(["_addOrganic", "news.sogou", "query"]);
		_gaq.push(["_addOrganic", "mp3.sogou", "query"]);
		_gaq.push(["_addOrganic", "pic.sogou", "query"]);
		_gaq.push(["_addOrganic", "blogsearch.sogou", "query"]);
		_gaq.push(["_addOrganic", "gougou", "search"]);
		var honor3 = locationHref.indexOf("/product/678.html") > 0 ? true : false;
		_zpq.push(["_setPageID", !honor3 ? "100" : "101"]);
		_zpq.push(["_setPageType", !honor3 ? "home" : "honor3"]);
		_zpq.push(["_setParams", ""]);
		_zpq.push(["_setAccount", "95"]);
		if(options.google) ec.load({
			url: "https://www.google-analytics.com/ga.js",
			type: "js",
			loadType: "lazy"
		});
		if(options.baidu) ec.load({
			url: "https://hm.baidu.com/h.js?a08b68724dd89d23017170634e85acd8",
			type: "js",
			loadType: "lazy"
		});
		if(options.cnzz) ec.load({
			url: "https://s95.cnzz.com/stat.php?id=4754392&web_id=4754392",
			type: "js",
			loadType: "lazy"
		});
		if(options.suning) ec.load({
			url: "https://cdn.zampda.net/s.js",
			type: "js",
			loadType: "lazy"
		});
		if(options.hicloud) {
			_paq.push(["setTrackerUrl", "https://metrics-drcn.dt.hicloud.com:6447/webv1"]);
			var orderCode = (ec.order && ec.order.orderCode ? ec.order.orderCode : "") + "";
			_paq.push(["setSiteId", "www." + mallDomain]);
			_paq.push(["setCustomVariable", 1, "cid", ec.util.cookie.get("cps_id") || "", "page"]);
			_paq.push(["setCustomVariable", 2, "direct", ec.util.cookie.get("cps_direct") || "", "page"]);
			_paq.push(["setCustomVariable", 3, "orderid", orderCode, "page"]);
			_paq.push(["setCustomVariable", 4, "wi", ec.util.cookie.get("cps_wi") || "", "page"]);
			ec.load({
				url: "https://res.vmallres.com/bi/hianalytics.js",
				type: "js",
				loadType: "lazy"
			});
			ec.util.cookie.set("cps_direct", null, {
				expires: -1,
				domain: mallDomain
			})
		}
		if(options.operate) {
			_paq.push(["setTrackerUrl", "https://metrics-drcn.dt.hicloud.com:6447/webv1"]);
			var orderCode = (ec.order && ec.order.orderCode ? ec.order.orderCode : "") + "";
			_paq.push(["setSiteId", "www." + mallDomain]);
			_paq.push(["setCustomVariable", 1, "cid", ec.util.cookie.get("cps_id") || "", "page"]);
			_paq.push(["setCustomVariable", 2, "direct", ec.util.cookie.get("cps_direct") || "", "page"]);
			_paq.push(["setCustomVariable", 3, "orderid", orderCode, "page"]);
			_paq.push(["setCustomVariable", 4, "wi", ec.util.cookie.get("cps_wi") || "", "page"]);
			var operData = "";
			operData = ec.code.convertFormat(options.optype, options.skuIds, options.bundleIds, options.custSkuIds, options.custBundleIds);
			_paq.push(["setCustomVariable", 10, "cart", operData, "page"]);
			_paq.push(["trackGoal", 1])
		}
	}
};
ec.code.convertFormat = function(optype, skuIds, bundleIds, custSkuIds, custBundleIds) {
	var _result = "";
	var _skuIds = [];
	var _bundleIds = [];
	var _custSkuIds = [];
	var _custBundleIds = [];
	if(ec.util.isArray(skuIds)) {
		_skuIds = $.map(skuIds, function(ele) {
			return "1_" + ele
		})
	}
	if(ec.util.isArray(bundleIds)) {
		_bundleIds = $.map(bundleIds, function(ele) {
			return "0_" + ele
		})
	}
	if(ec.util.isArray(custSkuIds)) {
		_custSkuIds = $.map(custSkuIds, function(ele) {
			return "3_" + ele
		})
	}
	if(ec.util.isArray(custBundleIds)) {
		_custBundleIds = $.map(custBundleIds, function(ele) {
			return "2_" + ele
		})
	}
	_skuIds = _bundleIds.concat(_skuIds, _custBundleIds, _custSkuIds);
	_result = optype + "," + _skuIds.join(":");
	return _result
};
ec.code.saveCIDInfoToCookie = function() {
	var referrer = document.referrer;
	var cps_id_array = ["https://www.baidu.com/=93436", "https://m.baidu.com/=93437", "https://www.sogou.com/=93438", "https://m.sogou.com/=93439", "https://m.so.com/=93441", "https://www.so.com/=93440", "https://yz.m.sm.cn/=93442", "https://www.google.com/=93444", "https://www.google.com.sg/=93443", "https://cn.bing.com/=93445"];
	if(referrer) {
		var index = referrer.indexOf("/", 8);
		var prev_cps_id = ec.util.cookie.get("cps_id");
		if(index == -1) {
			var domain = referrer
		} else {
			var domain = referrer.substr(0, index + 1)
		}
		$.each(cps_id_array, function(index, item) {
			if(item.indexOf(domain) == 0) {
				var cid = item.split("=")[1];
				ec.util.cookie.set("cps_id", cid, {
					expires: 3,
					domain: mallDomain
				});
				return
			}
		})
	}
};
ec.code.saveCpsInfoToCookie = function() {
	var cid = ec.code.getCPSInfoFromUrlRegex(location.href, "cid");
	var wi = ec.code.getCPSInfoFromUrlRegex(location.href, "wi");
	if($.trim(cid) == "" || cid.length < 0 || cid.lenght > 11) {
		ec.code.saveCIDInfoToCookie();
		return
	}
	var regText = /^\d+$/;
	if(!regText.test(cid)) {
		return
	}
	ec.util.cookie.set("cps_wi", null, {
		expires: -1,
		domain: mallDomain
	});
	ec.util.cookie.set("cps_id", cid, {
		expires: 3,
		domain: mallDomain
	});
	ec.util.cookie.set("cps_direct", "1", {
		expires: 1,
		domain: mallDomain
	});
	ec.util.cookie.set("cps_dap_redirect", "1", {
		expires: 1,
		domain: mallDomain
	});
	if(wi.length > 0 && wi.length < 200) {
		ec.util.cookie.set("cps_wi", wi, {
			expires: 3,
			domain: mallDomain
		})
	}
};
ec.code.getCPSInfoFromUrlRegex = function(url, name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
	var url = window.location.href;
	var params;
	if(url.indexOf("#") != -1) {
		params = url.substr(url.indexOf("#"))
	} else {
		params = window.location.search
	}
	var result = params.substr(1).match(reg);
	if(result != null) return unescape(result[2]);
	return ""
};
ec.code.getCPSInfoFromUrl = function(url, name) {
	if(url.indexOf("#") == -1 || url.indexOf(name + "=") == -1) {
		return ""
	}
	var queryString = url.substring(url.indexOf("#") + 1);
	var parmSegments = queryString.split("#");
	for(var i = 0; i < parmSegments.length; i++) {
		var tempStr = parmSegments[i];
		var parameters = tempStr.split("&");
		var pos, paraName, paraValue;
		for(var j = 0; j < parameters.length; j++) {
			pos = parameters[j].indexOf("=");
			if(pos == -1) {
				continue
			}
			paraName = parameters[j].substring(0, pos);
			paraValue = parameters[j].substring(pos + 1);
			if(paraName == name) {
				return unescape(paraValue.replace(/\+/g, " "))
			}
		}
	}
	return ""
};
ec.code.addService = function(options) {
	$(function() {
		if(options.showService) {
			var url = window.location.href;
			var index = url.indexOf("/product/");
			var urlInfo = "";
			var memo = "";
			if(index > 0) {
				urlInfo = url.substring(index + 9, url.length);
				if(urlInfo.length > 1) {
					var prdInfo = urlInfo.split(".html", 2);
					if(prdInfo.length > 1) {
						memo = prdInfo[0];
						var hash = prdInfo[1];
						if(hash.indexOf("#") >= 0) {
							var skuInfo = hash.split("#", 2)[1];
							var skuId = skuInfo.length > 0 ? skuInfo.split(",", 2)[0] || 0 : 0;
							if(skuId != 0) {
								memo = memo + "," + skuId
							}
						}
					}
				}
			}
			$("#tools-nav-service-robotim").css("display", "none");
			$("#tools-nav-service-robotim-button").css("display", "block");
			if(options.live800Url4Web) {
				$("#servicehrefId").valS(options.live800Url4Web + "&enterurl=" + encodeURIComponent(window.location.href) + "&k=1&from=06&remark=" + encodeURIComponent(memo));
				$("#tools-nav-service-robotim").css("display", "block")
			}
			if(options.serviceRobotThirdUrl4web) {
				$("#serviceProxyHrefId").valS(options.serviceRobotThirdUrl4web + "&enterurl=" + encodeURIComponent(window.location.href) + "&k=1&from=06&remark=" + encodeURIComponent(memo));
				if($("#serviceHelpSeCodeId").val() && $("#serviceHelpSeCodeId").val() != mallPrdEntity) {
					$("#tools-nav-service-robotim").css("display", "block")
				}
			}
		}
		if(options.showTools) {
			$("#tools-nav-survery").css("display", "block")
		}
		if(options.showService || options.showTools) {
			$("#tools-nav").css("bottom", "10px").show()
		}
	})
};
(function() {
	ec.code.saveCpsInfoToCookie();
	var _tracker, getTracker = function() {
		if(_tracker) return _tracker;
		_tracker = _gat._createTracker(ec.debug ? "" : "UA-28046633-3", "t2");
		return _tracker
	};
	ec.track = function(path, retryTime) {
		retryTime = retryTime || 3;
		try {
			if(window._gat && window._gat._createTracker) {
				if("[object Array]" == Object.prototype.toString.apply(path)) {
					path = path.join("/")
				}
				getTracker()._trackPageview(path);
				log("Track", path)
			} else {
				if(retryTime > 0) {
					setTimeout(function() {
						ec.track(path, retryTime - 1)
					}, 1e3)
				}
			}
		} catch(c) {
			throw c
		}
	};
	ec.trackEvent = function(category, action, optional_label, optional_value, retryTime) {
		retryTime = retryTime || 3;
		try {
			if(window._gat && window._gat._createTracker) {
				getTracker()._trackEvent(category, action, optional_label, optional_value);
				log("TrackEvent", category + " : " + action)
			} else {
				if(retryTime > 0) {
					setTimeout(function() {
						ec.trackEvent(category, action, optional_label, optional_value, retryTime - 1)
					}, 1e3)
				}
			}
		} catch(c) {
			throw c
		}
	}
})();
(function() {
	var source = ec.util.cookie.get("cps_source"),
		channel = ec.util.cookie.get("cps_channel"),
		direct = ec.util.cookie.get("cps_direct");
	ec.trackCPS = function(action, optional_value) {
		if(source && channel) ec.track(["/cps/event", action, source + "/" + channel, optional_value])
	};
	if(source && channel && direct) {
		ec.ready(function() {
			ec.track("/cps/pv/" + source + "/" + channel + location.pathname)
		})
	}
})();
ec.track99click = function(options) {
	var _ozprm;
	if(typeof options == "string") {
		_ozprm = options
	} else {
		var array = [],
			v;
		for(var s in options) {
			v = options[s];
			array.push(s + "=" + (ec.util.isArray(v) ? v.join(";") : v))
		}
		_ozprm = array.join("&")
	}
	ec.track99click._ozuid = ec.account.id;
	ec.track99click._ozprm = _ozprm
};
ec.pkg("ec.binding");
ec.binding.login = function() {
	var optBanding = ec.util.cookie.get("optBanding");
	if(optBanding == 0) {
		$.ajax({
			url: domainMain + "/account/isBindedTelephoneOrEmail.json",
			type: "get",
			dataType: "json",
			success: function(json) {
				if(!json.isLogin) {
					return false
				}
				ec.util.cookie.set("optBanding", 1);
				if(!json.success) {
					ec.load("ec.box", function() {
						ec.binding.requestUrl = domainMain + "/account/isBindedTelephoneOrEmail.json?t=" + (new Date).getTime();
						ec.binding.upCenterUrl = json.upUserCenter;
						ec.Cache.get("ecBindingPhone", function() {
							return new ec.box(document.getElementById("ec-binding-phone").innerHTML, {
								boxid: "bindingBox",
								boxclass: "ol_box_4",
								showButton: false,
								onopen: function(box) {
									ec.ui.loading.hide();
									$("#ec-binding-phone-1").show();
									$("#ec-binding-phone-url-1").attrS("href", ec.binding.upCenterUrl);
									box.setPosition()
								}
							})
						}).open()
					})
				}
			}
		})
	}
};
ec.binding.cart = {};
ec.binding.cart.withPhone = function(toCallback) {
	ec.binding.callback = toCallback;
	if(toCallback) {
		ec.ui.loading.show()
	}
	$.ajax({
		url: domainMain + "/account/isBindedPhoneCrossDomain.json?t=" + (new Date).getTime(),
		async: false,
		dataType: "json",
		timeout: 6e3,
		success: function(json) {
			if(!json.isLogin) {
				if(toCallback) {
					toCallback()
				}
				return
			}
			ec.util.cookie.set("optBanding", 1);
			if(!json.success) {
				ec.load("ec.box", function() {
					ec.binding.requestUrl = domainMain + "/account/isBindedPhoneCrossDomain.json?t=" + (new Date).getTime();
					var localHref = window.location.href;
					localHref = localHref.replace(/\\?isSuccess=0/g, "");
					ec.binding.upCenterUrl = json.upUserCenter + "&redirect_uri=" + localHref;
					ec.binding.upCenterUrl = encodeURI(ec.binding.upCenterUrl);
					var state = json.state;
					if(null == state) {
						alert("èŽ·å–æœåŠ¡å™¨æ•°æ®å¤±è´¥ï¼Œè¯·åˆ·æ–°é‡è¯•ï¼");
						return
					}
					if(state == 4) {
						bindBox = new ec.box(document.getElementById("ec-binding-phone").innerHTML, {
							boxid: "bindingBox",
							boxclass: "ol_box_4",
							showButton: false,
							onopen: function(box) {
								ec.ui.loading.hide();
								$("#ec-binding-phone-" + state).show();
								$("#bindEndDate4State4").html(json.upBindEndDate);
								if(state == 1 || state == 4) {
									$("#ec-binding-phone-url-" + state).attrS("href", ec.binding.upCenterUrl)
								}
								box.setPosition()
							},
							onclose: function(box) {
								if(toCallback) {
									toCallback()
								}
							}
						});
						bindBox.open()
					} else {
						bindBox = new ec.box(document.getElementById("ec-binding-phone").innerHTML, {
							boxid: "bindingBox",
							boxclass: "ol_box_4",
							showButton: false,
							onopen: function(box) {
								ec.ui.loading.hide();
								$("#ec-binding-phone-" + state).show();
								if(state == 1) {
									$("#ec-binding-phone-url-1").attrS("href", ec.binding.upCenterUrl)
								}
								box.setPosition()
							}
						});
						bindBox.open()
					}
				})
			} else {
				if(toCallback) {
					toCallback()
				}
			}
		}
	})
};
ec.binding.isBindedMobileOrEnterpriseUser = function(toCallback) {
	ec.binding.callback = toCallback;
	ec.ui.loading.show();
	$.ajax({
		url: domainMain + "/account/isBindedTelephoneOrEmail.json",
		type: "get",
		dataType: "json",
		success: function(json) {
			if(!json.isLogin) {
				if(toCallback) {
					toCallback()
				}
				return
			}
			if(!json.success) {
				ec.load("ec.box", function() {
					ec.binding.requestUrl = domainMain + "/account/isBindedTelephoneOrEmail.json?t=" + (new Date).getTime();
					ec.binding.upCenterUrl = json.upUserCenter;
					ec.Cache.get("ecBindingPhone", function() {
						return new ec.box(document.getElementById("ec-binding-phone").innerHTML, {
							boxid: "bindingBox",
							boxclass: "ol_box_4",
							showButton: false,
							onopen: function(box) {
								ec.ui.loading.hide();
								$("#ec-binding-phone-1").show();
								$("#ec-binding-phone-url-1").attrS("href", ec.binding.upCenterUrl);
								box.setPosition()
							}
						})
					}).open()
				})
			} else {
				if(toCallback) {
					toCallback()
				}
			}
		}
	})
};
ec.binding.closeState4 = function() {
	if(null != bindBox) {
		bindBox.close()
	}
};
ec.binding.showOk = function() {
	$(".ec-binding-phone-box").hide();
	$("#ec-binding-phone-2").show();
	$("#ec-binding-phone-url-2").attrS("href", ec.binding.upCenterUrl);
	$("#ec-binding-phone-url-3").attrS("href", ec.binding.upCenterUrl);
	bindBox.setPosition()
};
ec.binding.resetShow = function() {
	var _callBack = ec.binding.callback;
	var opts = {
		url: ec.binding.requestUrl,
		type: "get",
		async: "false",
		dataType: "json",
		success: function(json) {
			if(!json.success) {
				$("#ec-binding-phone-2").hide();
				$("#ec-binding-phone-3").show();
				ec.Cache.get("ecBindingPhone").setPosition()
			} else {
				ec.Cache.get("ecBindingPhone").close();
				if(_callBack) {
					_callBack();
					_callBack = null
				}
			}
		}
	};
	$.ajax(opts)
};
ec.binding.allCount = function() {
	var allCountWechat = ec.util.cookie.get("vmallOrderCountWechat");
	if(allCountWechat == 0) {
		$("#li-order-small span").html("å°ç¨‹åºè®¢å•")
	}
	if(allCountWechat > 0) {
		$("#li-order-small span").html("å°ç¨‹åºè®¢å•<em>(" + allCountWechat + ")</em>")
	}
	var allCount = ec.util.cookie.get("vmallOrderCount");
	if(allCount == 0) {
		$("#li-order span").html("æˆ‘çš„è®¢å•")
	} else if(allCount > 0) {
		$("#li-order span").html("æˆ‘çš„è®¢å•<em>(" + allCount + ")</em>")
	} else {
		$("#li-order span").html("æˆ‘çš„è®¢å•<em class='hide'>0</em>");
		$.ajax({
			type: "get",
			url: domainMain + "/member/orderCount.json?t=" + (new Date).getTime(),
			dataType: "json",
			async: true,
			timeout: 1e4,
			success: function(json) {
				if(!json.success) {
					return
				}
				var jsonCount = parseInt(json.orderCount.unpaidOrderCount) + parseInt(json.orderCount.unreceiptOrderCount);
				jsonCount = jsonCount ? jsonCount : 0;
				var strOldNum = $("#li-order span em").text();
				var oldNum = strOldNum.substring(1, strOldNum.length - 1);
				jsonCount = jsonCount + parseInt(oldNum);
				$("#li-order span em").textS("(" + jsonCount + ")");
				$("#li-order span em").removeClass("hide");
				ec.util.cookie.set("vmallOrderCount", jsonCount);
				$("#li-order-small span").html("å°ç¨‹åºè®¢å•<em class='hide'>0</em>");
				var jsonCount6 = parseInt(json.orderCount.unpaidOrderCountWechat) + parseInt(json.orderCount.unreceiptOrderCountWechat);
				jsonCount6 = jsonCount6 ? jsonCount6 : 0;
				var strOldNum6 = $("#li-order-small span em").text();
				var oldNum6 = strOldNum6.substring(1, strOldNum6.length - 1);
				jsonCount6 = jsonCount6 + parseInt(oldNum6);
				$("#li-order-small span em").textS("(" + jsonCount6 + ")");
				if(jsonCount6 < 1) {
					$("#li-order-small span").html("å°ç¨‹åºè®¢å•")
				}
				$("#li-order-small span em").removeClass("hide");
				ec.util.cookie.set("vmallOrderCountWechat", jsonCount6)
			}
		});
		$.ajax({
			type: "POST",
			url: openApiDomain + "/rms/comment/getNoCommentPrdCount.json?t=" + (new Date).getTime(),
			dataType: "json",
			timeout: 1e4,
			async: true,
			data: JSON.stringify({
				tab: "nocomment"
			}),
			success: function(_json) {
				if(_json.resultCode != 0) {
					return
				}
				var jsonCount = parseInt(_json.data.count);
				jsonCount = jsonCount ? jsonCount : 0;
				var str_oldNum = $("#li-order span em").text();
				var old_Num = str_oldNum.substring(1, str_oldNum.length - 1);
				jsonCount = jsonCount + parseInt(old_Num);
				if(jsonCount > 0) {
					$("#li-order span em").textS("(" + jsonCount + ")");
					$("#li-order span em").removeClass("hide")
				} else {
					$("#li-order span").text("æˆ‘çš„è®¢å•")
				}
				ec.util.cookie.set("vmallOrderCount", jsonCount)
			}
		})
	}
};
ec.binding.getUnReadMessageCount = function() {
	var myCenterMsg = ec.util.cookie.get("vmallMyCenterMsg");
	if(myCenterMsg != null && myCenterMsg > 0) {
		if(myCenterMsg < 100) {
			$("#li-msg em").textS("(" + myCenterMsg + ")")
		} else if(myCenterMsg > 99) {
			$("#li-msg em").textS("(99+)")
		}
	} else {
		$.ajax({
			url: openApiDomain + "/mcp/message/unreadMsgNum?portal=1&lang=zh-CN&country=" + mallCountry,
			timeout: 1e4,
			dataType: "json",
			methodType: "get",
			success: function(json) {
				if(!json.success) {
					return
				}
				var weChatInfo = ec.util.cookie.get("mpUidInfo");
				if(weChatInfo) {
					$.ajax({
						url: openApiDomain + "/mcp/message/unreadMsgNum/mp?portal=1&lang=zh-CN&country=" + mallCountry,
						timeout: 1e4,
						dataType: "json",
						methodType: "get",
						success: function(wechatJson) {
							if(!wechatJson.success) {
								return
							}
							var wechatMsgCount = wechatJson.ntfMsgNum;
							var msgcount = json.activityMsgNum + json.logisticsMsgNum + json.ntfMsgNum + json.interactMsgnum + wechatMsgCount;
							if(msgcount > 0 && msgcount < 100) {
								$("#li-msg em").textS("(" + msgcount + ")");
								$("#top-newMsgCount").html(msgcount || 0)
							} else if(msgcount > 99) {
								$("#li-msg em").textS("(99+)")
							}
							ec.util.cookie.set("vmallMyCenterMsg", msgcount)
						}
					})
				} else {
					var msgcount = json.activityMsgNum + json.logisticsMsgNum + json.ntfMsgNum + json.interactMsgnum;
					if(msgcount > 0 && msgcount < 100) {
						$("#li-msg em").textS("(" + msgcount + ")");
						$("#top-newMsgCount").html(msgcount || 0)
					} else if(msgcount > 99) {
						$("#li-msg em").textS("(99+)")
					}
					ec.util.cookie.set("vmallMyCenterMsg", msgcount)
				}
			}
		})
	}
};
bindCartResult = function(html) {
	var localHref = window.location.href;
	localHref = localHref.replace(/\?isSuccess=0/g, "").replace(/&isSuccess=0/g, "");
	var upaddr = upBindPhoneAddr.replace(/&amp;/g, "&");
	ec.load("ec.box", function() {
		bindBox = new ec.box(html, {
			boxid: "bindingBox",
			boxclass: "ol_box_4",
			showButton: false,
			onopen: function(box) {
				ec.ui.loading.hide();
				$("#ec-binding-phone-1").hide();
				$("#ec-binding-phone-2").hide();
				$("#ec-binding-phone-3").hide();
				$("#ec-binding-phone-4").hide();
				$("#ec-binding-phone-5").show();
				$("#ec-binding-phone-url-5").attrS("href", upaddr + "&redirect_uri=" + localHref);
				var reLoginUrl = domainMain + "/member/cartBind/result/logout?url=" + $("#ec-binding-phone-reLogin-5").attrS("href") + "?url=" + localHref;
				$("#ec-binding-phone-reLogin-5").attrS("href", encodeURI(reLoginUrl));
				box.setPosition()
			}
		});
		bindBox.open()
	})
};
getUrlParaMap4CartBinding = function() {
	var query = decodeURIComponent(window.location.search);
	var paras = {};
	if(query) {
		var p;
		query = query.substring(1).split("&");
		for(var i = 0; i < query.length; i++) {
			p = query[i].split("=");
			if(p.length == 2) paras[p[0]] = p[1].escapeHTML4CartBinding()
		}
	}
	return paras
};
String.prototype.escapeHTML4CartBinding = function() {
	return this.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;")
};
ec.ready(function() {
	ec.binding.login();
	if("/member" === location.pathname || location.pathname.startsWith("/member/") || location.pathname.startsWith("/authmember/")) {
		if("/member" !== location.pathname && "/member/order" !== location.pathname) {
			ec.binding.allCount()
		}
		if("/member/msg" !== location.pathname) {
			ec.binding.getUnReadMessageCount()
		}
	}
});
ec.pkg("ec.account");
ec.load("jquery.autocomplete", {
	loadType: "lazy",
	callback: function() {
		$("#search-kw").autocomplete({
			serviceUrl: "/search_keywords",
			minChars: 1,
			maxHeight: 400,
			deferRequestBy: 100
		})
	}
});
ec.load("ec.box");
ec.load("ec.XSSUtils");
ec.load("ec.product.coupon");
ec.load("ec.product.gift");
ec.logout = function(redirectTo) {
	if(!redirectTo && window.event) {
		var obj = $(window.event.target || window.event.srcElement);
		redirectTo = obj.attr("data-url") || "";
		if(!redirectTo && obj.attr("data-longurl")) redirectTo = decodeURIComponent((XSS.decode(obj.attr("data-longurl")).match(/\?url=(.+)/) || ["", ""])[1])
	}
	var data = {};
	if(redirectTo) data.url = redirectTo;
	$.ajax({
		method: "post",
		url: "/customer/logout.json",
		data: data,
		success: function(r) {
			if(r && r.redirectUrl) location.href = XSS.decode(r.redirectUrl);
			else alertBox("\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5", function() {
				location.reload()
			})
		},
		error: function() {
			alertBox("\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5", function() {
				location.reload()
			})
		}
	})
};
ec.account.customerInfo = function() {
	this.zmPoint = null;
	this.empiricalValue = null
};
var g_pointBlance = 0;
var g_couponCount = 0;
var g_balanceAmount = 0;
var g_newMsgCount = 0;
var g_totalPoint = 0;
var minCartNum = 0;
window.gid = function(id) {
	return document.getElementById(id)
};
ec.account.isLogin = function() {
	ec.account.id = ec.util.cookie.get("uid");
	ec.account.loginName = ec.util.cookie.get("ac_loNa");
	return ec.account.id && ec.account.loginName
};
ec.account.syncCustomSession = function(callback) {
	$.ajax({
		async: false,
		url: "/account/syncEmailAndMobile.json",
		dataType: "json",
		method: "post",
		success: function(json) {
			if(callback) callback(json)
		}
	})
};
ec.account.getStatus = function(callback) {
	$.ajax({
		url: domainAccount + "/status.json?t\x3d" + (new Date).getTime(),
		dataType: "json",
		timeout: 1E4,
		jsonop: "callback",
		type: "post",
		success: function(result) {
			if(result && result.id > 0) {
				ec.account.id = result.id;
				ec.account.uid = result.uid;
				ec.account.name = result.name;
				ec.account.nickName = result.nickName;
				ec.account.displayName = result.displayName;
				ec.account.loginName = result.loginName;
				ec.account.email = result.email;
				ec.account.mobile = result.mobile;
				ec.account.isQueue = result.isQueue;
				ec.account.custGrade = result.custGrade;
				ec.account.custPrivilege = result.custPrivilege;
				ec.account.custPoint = result.custPoint;
				ec.account.userState = result.userState;
				ec.account.isAuthCust = result.isAuthCust;
				var isFirst = ec.util.cookie.get("ifl_v");
				if(isFirst == "1") $.ajax({
					url: "/account/load",
					type: "POST"
				})
			}
			callback()
		}
	})
};
ec.account.getAccountStatus = function(userId, callback, isLazy) {
	if(userId) $.ajax({
		url: domainMain + "/account/status?" + (new Date).getTime(),
		method: "post",
		dataType: "json",
		async: false,
		success: function(r) {
			var ks = Object.keys(r || {});
			ks.forEach(function(k) {
				ec.account[k] = r[k]
			});
			callback()
		}
	})
};
ec.account.getLoginInfo = function(callback, isLazy) {
	var loginInfo = ec.util.cookie.get("ac_li");
	var userId = ec.util.cookie.get("uid");
	var isValCas = ec.util.cookie.get("isValCas");
	try {
		if(userId && isValCas && "false" == isValCas) {
			ec.account.id = ec.util.cookie.get("uid");
			ec.account.uid = ec.util.cookie.get("uid");
			ec.account.name = ec.util.cookie.get("user");
			ec.account.nickName = ec.util.cookie.get("name");
			ec.account.displayName = ec.util.cookie.get("displayName");
			ec.account.loginName = ec.util.cookie.get("user");
			ec.account.isValCas = "false";
			$.ajax({
				url: "/account/load",
				async: false,
				type: "POST"
			});
			ec.account.getAccountStatus(userId, callback, isLazy);
			ec.account.isValCas = ec.util.cookie.get("isValCas");
			callback();
			return
		}
		if(loginInfo && userId) {
			ec.account.id = ec.util.cookie.get("uid");
			ec.account.uid = ec.util.cookie.get("uid");
			ec.account.name = ec.util.cookie.get("user");
			ec.account.nickName = ec.util.cookie.get("name");
			ec.account.displayName = ec.util.cookie.get("displayName");
			ec.account.loginName = ec.util.cookie.get("ac_loNa");
			ec.account.email = ec.util.cookie.get("ac_lel");
			ec.account.mobile = ec.util.cookie.get("ac_lmi");
			ec.account.isQueue = ec.util.cookie.get("ac_liq");
			ec.account.custGrade = ec.util.cookie.get("ac_lgc");
			ec.account.custPrivilege = ec.util.cookie.get("ac_cp");
			ec.account.custPoint = ec.util.cookie.get("ac_ltp");
			ec.account.userState = ec.util.cookie.get("ac_lus");
			callback();
			return
		}
	} catch(e) {}
	ec.account.getAccountStatus(userId, callback, isLazy)
};
ec.account.showEnterpriseUserNav = function() {
	var isEnterpriseUser = ec.util.cookie.get("isEnterpriseUser");
	if(isEnterpriseUser && "true" == isEnterpriseUser) {
		$("#li-enterprise-preferential").attr("class", "s-hwep");
		$("#li-enterprise-preferential").html('\x3ca href\x3d"' + domainMain + '/member/enterprise"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show();
		$("#li-enterprise").html('\x3ca href\x3d"' + domainMain + '/member/enterprise"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show()
	} else {
		var isGroupUser = ec.util.cookie.get("isGroupUser");
		if(isGroupUser && isGroupUser == "true") {
			var adPrdUrl = ec.util.cookie.get("adPrdUrl");
			if(adPrdUrl && adPrdUrl.length > 0) {
				$("#li-enterprise-preferential").html('\x3ca href\x3d"' + adPrdUrl + '"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show();
				$("#li-enterprise").html('\x3ca href\x3d"' + adPrdUrl + '"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show()
			} else {
				$("#li-enterprise-preferential").html('\x3ca href\x3d"#"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show();
				$("#li-enterprise").html('\x3ca href\x3d"#"\x3e\x3cspan\x3e\u4f18\u60e0\u5185\u8d2d\x3c/span\x3e\x3c/a\x3e').show()
			}
			$("#li-enterprise-preferential").attr("class", "btn-hwep")
		} else {
			$("#li-enterprise-preferential").html("");
			$("#li-enterprise").html("")
		}
	}
};
ec.account.getAccountInfo = function(callback) {
	ec.account.showEnterpriseUserNav();
	$.ajax({
		url: domainMain + "/member/accountInfo.json",
		dataType: "json",
		timeout: 1E4,
		timeoutFunction: function() {
			alert(timeOutInfo)
		},
		success: function(json) {
			if(json && json.enterpriseUser) {
				ec.util.cookie.set("isEnterpriseUser", "true", {
					domain: mallDomain
				});
				ec.account.showEnterpriseUserNav()
			}
			if(json && !json.success && json.code == "login") {
				var e = {
					domain: mallDomain
				};
				ec.account.id = ec.util.cookie.set("uid", null, e);
				ec.account.loginName = ec.util.cookie.set("user", null, e);
				$("#unlogin_status").show();
				$("#top_login").removeClass().addClass("header-toolbar hide");
				$("#top_unlogin").removeClass().addClass("header-toolbar");
				$("#gg_login").removeClass().addClass("i-mall-prompt clearfix hide");
				$("#gg_unlogin").removeClass().addClass("i-mall-prompt clearfix");
				$("#privilege_is_login").removeClass().addClass("privilege-user privilege-user-gray");
				$(".privilege-user-login").show();
				$("#personal_privilege").hide();
				$(".user-canvas").removeClass().addClass("user-canvas hide");
				$(".user-canvas").removeAttr("style");
				$("#privilege-user-img").find("img").attr("src", "images/echannel/misc/img_not_logged_in.png");
				$("#balanceicon_privilege").html("--");
				$("#couponicon_privilege").html("--");
				$("#balanceAmount_privilege").html("--");
				ec.minicart.setNum(0);
				$(".business-user-info").hide();
				$(".business-user-bottom").find(".business-user-num").hide();
				$(".business-user").addClass("business-user-gray");
				$("#userImgID").find("img").attr("src", "/images/echannel/misc/img88_black.jpg");
				$("#loginUserInfoId").show();
				$(".business-user-bottom").find(".business-user-explain").show();
				return
			}
			callback(json);
			getPointBalance();
			ec.account.getBalanceAmount();
			getPetalNumber()
		}
	})
};
ec.account.showCustoemrInfo = function(json) {
	if(parseInt(json.couponCount) >= 0) {
		g_couponCount = json.couponCount;
		$("#top-couponCount").html(json.couponCount)
	}
	$.ajax({
		url: openApiDomain + "/mcp/message/unreadMsgNum?portal\x3d1\x26lang\x3dzh-CN\x26country\x3d" + mallCountry,
		timeout: 1E4,
		dataType: "json",
		methodType: "get",
		success: function(jsonTx) {
			if(jsonTx.success || jsonTx.isSuccess) {
				var weChatInfo = ec.util.cookie.get("mpUidInfo");
				if(weChatInfo) $.ajax({
					url: openApiDomain + "/mcp/message/unreadMsgNum/mp?portal\x3d1\x26lang\x3dzh-CN\x26country\x3d" + mallCountry,
					timeout: 1E4,
					dataType: "json",
					methodType: "get",
					success: function(wechatJson) {
						if(!wechatJson.success) return;
						var wechatMsgCount = wechatJson.ntfMsgNum;
						var newMsgCount = jsonTx.activityMsgNum + jsonTx.logisticsMsgNum + jsonTx.ntfMsgNum + jsonTx.interactMsgnum + wechatMsgCount;
						ec.util.cookie.set("vmallMyCenterMsg", newMsgCount);
						g_newMsgCount = newMsgCount;
						$("#top-newMsgCount").html(newMsgCount || 0);
						if(newMsgCount > 0) $("#li-msg em").textS("(" + newMsgCount + ")")
					}
				});
				else {
					var newMsgCount = jsonTx.activityMsgNum + jsonTx.logisticsMsgNum + jsonTx.ntfMsgNum + jsonTx.interactMsgnum;
					ec.util.cookie.set("vmallMyCenterMsg", newMsgCount);
					g_newMsgCount = newMsgCount;
					$("#top-newMsgCount").html(newMsgCount || 0);
					if(newMsgCount > 0) $("#li-msg em").textS("(" + newMsgCount + ")")
				}
			}
		}
	});
	if(json.customerInfo) {
		var customerInfo = json.customerInfo;
		if(customerInfo.headPictureURL) {
			$("#customerPic").attrS("src", customerInfo.headPictureURL);
			$("#gg_customerPic").attrS("src", customerInfo.headPictureURL)
		} else {
			var imgpath = $("#customerPic").attr("imgpath");
			$("#customerPic").attr("src", imgpath + "/echannel/misc/img_logged_in.png");
			$("#gg_customerPic").attr("src", imgpath + "/echannel/misc/img_logged_in.png")
		}
		if(customerInfo.totalPoint) {
			$("#empiricalValue").html(customerInfo.totalPoint);
			ec.account.customerInfo.empiricalValue = customerInfo.totalPoint;
			g_totalPoint = customerInfo.totalPoint
		}
		if(customerInfo.mobileStatus && customerInfo.mobileStatus == "1") $("#validateMobile").html("\u5df2\u9a8c\u8bc1\u624b\u673a").removeClass("link-non-validated").addClass("link-validated");
		if(customerInfo.emailStatus && customerInfo.emailStatus == "1") $("#validateMail").html("\u5df2\u9a8c\u8bc1\u90ae\u7bb1").removeClass("link-non-validated").addClass("link-validated");
		if(customerInfo.isAuthentication && customerInfo.isAuthentication == "1") {
			$("#authentication_y").show();
			$("#authentication_n").hide()
		} else {
			$("#authentication_n").show();
			$("#authentication_y").hide()
		}
	}
	if(json.gradeConfig) {
		var max = json.gradeConfig.maxScores;
		var min = json.gradeConfig.minScores;
		var interval = max - min;
		var userScores = g_totalPoint;
		var cha = userScores - min;
		if(isNaN(interval)) interval = 5E4;
		if(cha > 5E4) cha = 5E4;
		var resultNum = cha / interval * 100;
		if(isNaN(resultNum)) {
			resultNum = 0;
			userScores = 0
		}
		if(resultNum <= 0) resultNum = 0;
		else resultNum = Math.round(resultNum);
		var code = json.gradeConfig.code;
		$("#gg_jyz").attr("style", "width: " + resultNum + "%");
		$("#canvas-index").attr("style", "width: " + resultNum + "%");
		var nextGradeName = json.gradeConfig.nextGradeName;
		if(nextGradeName == "maxlevel") max = 1E5;
		(function() {
			ec.account.privilege_updateProgress(max, min, userScores, code);
			ec.account.privilege_updateProgressIndex(code)
		})()
	}
};

function htmlEncode(string) {
	var entityMap = {
		"\x26": "\x26amp;",
		"\x3c": "\x26lt;",
		"\x3e": "\x26gt;",
		'"': "\x26quot;",
		"'": "\x26#39;",
		"/": "\x26#x2F;"
	};
	return String(string).replace(/[&<>"'\/]/g, function(s) {
		return entityMap[s]
	})
}

function getPetalNumber() {
	$.ajax({
		url: "/member/petalValid.json",
		timeout: 1E4,
		dataType: "json",
		success: function(json) {
			if(!json.success) $("#petalicon_myCenter").html(0);
			else $("#petalicon_myCenter").html('\x3ca href\x3d"/member/petal?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + json.petalNumber + "\x3c/a\x3e")
		}
	})
}
ec.account.getBalanceAmount = function(callback) {
	callback = callback || function(r) {
		if(r && r.success) {
			g_balanceAmount = parseFloat(r.balanceAmount || 0).toFixed(2);
			$("#balanceAmount").html(g_balanceAmount);
			if(parseInt(g_balanceAmount) > parseInt(999)) $("#balanceAmount_privilege").empty().html('\x3ca href\x3d"/member/balance?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + 999 + "+\x3c/a\x3e");
			else $("#balanceAmount_privilege").empty().html('\x3ca href\x3d"/member/balance?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + g_balanceAmount + "\x3c/a\x3e");
			$("#balanceAmount_myCenter").html('\x3ca href\x3d"/member/balance?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + g_balanceAmount + "\x3c/a\x3e");
			$("#balanceAmount_myCenter").removeClass("p-price-no")
		}
	};
	$.ajax({
		url: openApiDomain + "/mcp/pay/queryBalanceAmount",
		method: "post",
		dataType: "json",
		contentType: "text/plain",
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1
		}),
		success: function(r) {
			callback(r)
		}
	})
};
ec.ready(function() {
	var _showLoginTips = function() {
		if(ec.account.isLogin()) {
			var loginName = ec.autoEncodeAttr(ec.account.displayName) || ec.autoEncodeAttr(ec.account.nickName) || ec.autoEncodeAttr(ec.account.name) || ec.autoEncodeAttr(ec.account.loginName);
			$("#customer_name").html(loginName);
			if($("#cart_unlogin_info")[0]) $("#cart_unlogin_info p").html('\x3ca href\x3d"/member?t\x3d' + (new Date).getTime() + '"\x3e' + loginName + "\x3c/a\x3e");
			$("#login_status,#cart_login_info").show();
			$("#up_user_center").show();
			$("#unlogin_status,#cust_login_info").hide();
			$("#loginName").html('\x3ca href\x3d"/member?t\x3d' + (new Date).getTime() + '"\x3e' + loginName + "\x3c/a\x3e");
			$("#up_loginName").html(loginName);
			$("#up_loginName_info").html(loginName);
			ec.account.showVipInfo();
			$("#top_login").removeClass().addClass("header-toolbar");
			$("#top_loginName").html(loginName);
			$("#top_unlogin").removeClass().addClass("header-toolbar hide");
			$("#gg_loginName").html(loginName);
			$("#gg_login").removeClass().addClass("i-mall-prompt clearfix");
			$("#gg_unlogin").removeClass().addClass("i-mall-prompt clearfix hide");
			var isAuthCust = ec.util.cookie.get("isAuthCust");
			if("true" == isAuthCust) {
				$("#authentication_y").show();
				$("#authentication_n").hide()
			} else {
				$("#authentication_n").show();
				$("#authentication_y").hide()
			}
			$("#newPointlogin_status").show();
			userCenterFlagTemp = ec.util.cookie.get("userCenterFlag");
			enterpriseUserCookieTemp = ec.util.cookie.get("isEnterpriseUser");
			if(userCenterFlagTemp != null && userCenterFlagTemp != "")
				if(userCenterFlagTemp == "true")
					if(enterpriseUserCookieTemp.length > 4) ec.account.getAccountInfo(ec.account.showCustoemrInfo);
			if(window.location.pathname && window.location.pathname == "/visitor/vistorConfirm") ec.redirectTo(domainMain);
			ec.account.showEnterpriseUserNav()
		} else {
			$("#gg_login").removeClass().addClass("i-mall-prompt clearfix hide");
			$("#gg_unlogin").removeClass().addClass("i-mall-prompt clearfix");
			$("#top_login").removeClass().addClass("header-toolbar hide");
			$("#top_unlogin").removeClass().addClass("header-toolbar")
		}
	};
	var _upLogin = function(callback, visitorInfoTemp, redirectUrl) {
		redirectUrl = redirectUrl || location.href;
		var visitorName = "";
		var funName = "callback" + (new Date).getTime(),
			boxWidth;
		boxWidth = 500;
		if(ec.product.isSupportVisitorMode != undefined) {
			var visitorFlag = false;
			var skuInfo = ec.product.getSkuInfo(ec.product.getSku() || ec.product.defaultSku);
			var skuId = skuInfo.id;
			var sbomCode = skuInfo.code;
			if(ec.product.productSupportList != undefined && ec.product.productSupportList != null)
				for(var n = 0; n < ec.product.productSupportList.length; n++) {
					var visitorInfo = ec.product.productSupportList[n];
					if(visitorInfo.sbomCode == sbomCode) {
						var nowTime = ec.product.getSysDate();
						var startTime = visitorInfo.startTime;
						var endTime = visitorInfo.endTime;
						if(startTime <= nowTime && endTime >= nowTime) visitorFlag = true
					}
				}
			if(ec.product.inventory.haveInventory(skuId) && visitorFlag && ec.product.isSupportVisitorMode == 1 && ec.product.productType != 4 && !rush.sbom.isRushProduct() && !rush.sbom.isRushSbom(skuId))
				if(ec.product.isGift != 2 && (!ec.product.isCover || ec.product.isCover == undefined) && !ec.product.isComb)
					if(visitorInfoTemp == "visitorInfo") {
						visitorName = '\x3cdiv class\x3d"visitor-login"\x3e\x3ca href\x3d"javascript:;" onclick\x3d"ec.product.orderNowByVisitor();" class\x3d"visitor-login-btn"\x3e\u514d\u767b\u5f55\u8d2d\u4e70\x3c/a\x3e\x3cdiv class\x3d"visitor-login-explain"\x3e' + "\x3cspan\x3e\u6e29\u99a8\u63d0\u793a\uff1a\x3c/span\x3e\u514d\u767b\u5f55\u8d2d\u4e70\u662f" + mallName + "\uff08www." + mallDomain + '\uff09\u63a8\u51fa\u7684\u5feb\u6377\u8d2d\u4e70\u65b9\u5f0f\uff0c\u6682\u4e0d\u652f\u6301\u9886\u53d6\u548c\u4f7f\u7528\u4f18\u60e0\u5238\uff0c\u4e0d\u652f\u6301\u7d2f\u8ba1\u79ef\u5206\u6216\u7ecf\u9a8c\u503c\u7b49\u3002\u63a8\u8350\x3ca href\x3d"' + ec.product.casRegister + '"\x3e\u6ce8\u518c\x3c/a\x3e\u6210\u4e3a' + mallName + "\u4f1a\u5458\uff0c\u83b7\u5f97\u76f8\u5173\u8d2d\u4e70\u6743\u76ca\u548c\u670d\u52a1\u3002" + "\x3c/div\x3e\x3c/div\x3e";
						boxWidth = 1E3
					}
		}
		if("string" !== typeof loginWindowSupportedBrowsers) loginWindowSupportedBrowsers = "noneuadefined";
		if(visitorName === "" && navigator.userAgent.match(RegExp(loginWindowSupportedBrowsers))) {
			location.href = "/account/login?url\x3d" + encodeURIComponent(redirectUrl);
			return false
		}
		var url = "/account/login?type\x3dframe\x26url\x3d" + encodeURIComponent(domainMain + "/account/upCallback.html?funName\x3d" + funName + "\x26prePage\x3d" + encodeURIComponent(encodeURIComponent(window.location.href))),
			name = "up-iframe-" + (new Date).getTime(),
			html = '\x3cdiv id\x3d"visitorRedirect" class\x3d"clearfix"\x3e' + '\x3ciframe id\x3d"iframeLogin" class\x3d"boxIframe fl" width\x3d"497" height\x3d"550" frameborder\x3d"0" name\x3d"' + name + '" src\x3d"about:blank" scrolling\x3d"no"\x3e\x3c/iframe\x3e' + "\x3c/div\x3e";
		var box = (new ec.box(html, {
			boxid: "ec_login",
			title: " ",
			remember: false,
			width: boxWidth,
			height: 600,
			showButton: false,
			onclose: function(box) {
				try {
					delete window[funName]
				} catch(e) {
					window[funName] = null
				}
				box.find("iframe").each(function() {
					this.contentWindow.close();
					$(this).remove()
				})
			},
			onopen: function() {
				ec.redirectTo({
					url: url,
					win: window[name]
				});
				$("#iframeLogin").load(function() {
					try {
						if(window[name] && (window[name].document.querySelectorAll("div.event-503-wrp").length > 0 || window[name].document.querySelectorAll("div.system-error").length > 0)) ec.redirectTo({
							url: "/account/login-error.html",
							win: window[name]
						})
					} catch(e) {}
					if($(".visitor-login").length == 0) $("#visitorRedirect").append(visitorName)
				})
			}
		})).open();
		window[funName] = function() {
			csrfToken.setup();
			if(!isNaN(parseInt(window.location.pathname.substring(9, window.location.pathname.lastIndexOf(".html"))))) {
				ec.product.coupon.loadCoupon(ec.product.getSkuInfo(ec.product.getSku()).code);
				ec.product.showGroupPrice(ec.product.getSkuInfo(ec.product.getSku()));
				ec.product.getSkuInfo(ec.product.getSku()).queryCouponFlag = false
			}
			if(typeof isUseAccount != "undefined" && isUseAccount == "true") ec.account.getStatus(_showLoginTips);
			else {
				ec.account.getLoginInfo(_showLoginTips, false);
				if(window.location.pathname == "/company") ec.redirectTo("/company");
				ec.util.cookie.get("ifl_v")
			}
			if(callback) callback();
			var e = {
				domain: mallDomain
			};
			ec.util.cookie.set("thirdLoginFlag", null, e);
			box.close();
			ec.agreement.init()
		}
	};
	ec.account.showLoginForm = _upLogin;
	ec.account.afterLogin = function(callback, visitorInfoTemp, redirectUrl) {
		if(ec.account.isLogin()) {
			ec.account.getLoginInfo(_showLoginTips, false);
			callback()
		} else $.ajax({
			url: "/account/check/loginInfo.json",
			dataType: "json",
			success: function(json) {
				if(json.loginFlag == "1") {
					ec.account.getLoginInfo(_showLoginTips, false);
					return
				} else _upLogin(callback, visitorInfoTemp, redirectUrl)
			},
			error: function(x) {
				alert("\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5")
			}
		})
	};
	if(typeof isUseAccount != "undefined" && isUseAccount == "true") ec.account.getStatus(_showLoginTips);
	else ec.account.getLoginInfo(_showLoginTips, true);
	var cartId = ec.util.cookie.get("cartId");
	var cartAdded = ec.util.cookie.get("cartAdded");
	if(cartAdded && cartAdded != cartId) ec.util.cookie.set("cartAdded", null);
	$("#login_status").hover(function() {
		ec.account.getAccountInfo(ec.account.showCustoemrInfo)
	}, function() {})
});
ec.account.showVipInfo = function() {
	if(ec.account.userState && ec.account.userState == "1") {
		$("#vip-inActive").hide();
		$("#vip-Active i").removeClass().addClass("icon-vip-level-" + ec.account.custGrade);
		$("#vip-Active").attr("title", "VMALL V" + ec.account.custGrade + "\u4f1a\u5458");
		$("#vip-Active").show();
		var html = [];
		html.push('\x3cem class\x3d"vip-state" id\x3d"vip-info"\x3e\x26nbsp;\x26nbsp;\x26nbsp;\x26nbsp;');
		html.push('\x3ca href\x3d"/member/point" title\x3d"VMALL V' + ec.account.custGrade + '\u4f1a\u5458" id\x3d"vip-Active" \x3e\x3ci class\x3d"icon-vip-level-' + ec.account.custGrade + '"\x3e\x3c/i\x3e\x3c/a\x3e');
		html.push("\x3c/em\x3e");
		$("#cart_unlogin_info p").append(html.join(""));
		$("#vip-Active-top i").removeClass().addClass("icon-vip-level-" + ec.account.custGrade);
		$("#vip-Active-top").attr("title", "VMALL V" + ec.account.custGrade + "\u4f1a\u5458");
		$("#vip-Active-gg").removeClass().addClass("icon-vip-level-" + ec.account.custGrade);
		if(ec.account.custGrade == "0") {
			$("#oldPeople").hide();
			$("#newPeople").show()
		} else {
			$("#oldPeople").show();
			$("#newPeople").hide()
		}
	} else if(ec.account.isValCas && "false" == ec.account.isValCas) {
		$("#vip-inActive").hide();
		$("#vip-Active").hide();
		$("#vip-Active-top").removeClass().addClass("icon-vip-level-0");
		$("#vip-Active-gg").removeClass().addClass("icon-vip-level-0");
		$("#oldPeople").hide();
		$("#newPeople").show()
	} else {
		$("#cart_unlogin_info p").append('\x26nbsp;\x26nbsp;\x3cem class\x3d"vip-state"\x3e\x3ca class\x3d"link-noAct" href\x3d"/member/account" id\x3d"vip-inActive" title\x3d"\u8bf7\u5b8c\u5584\u4e2a\u4eba\u4fe1\u606f\uff0c\u5373\u523b\u4eab\u53d7\u4f1a\u5458\u7279\u6743"\x3e\u53bb\u6fc0\u6d3b\x3c/a\x3e\x3c/em\x3e');
		$("#vip-inActive").show();
		$("#vip-Active").hide();
		$("#vip-Active-top").removeClass().addClass("icon-vip-level-0");
		$("#vip-Active-gg").removeClass().addClass("icon-vip-level-0");
		$("#oldPeople").hide();
		$("#newPeople").show()
	}
};
ec.pkg("ec.minicart");
ec.minicart.processCheck = function(cartInfo) {
	var itemList = cartInfo.itemInfos;
	for(var i = 0; i < itemList.length; i++) {
		var item = itemList[i];
		if(item.itemType == "P")
			if(item.selected == "1") itemList[i].checked = true;
			else itemList[i].checked = false;
		else if(item.selected == "1") itemList[i].checked = true;
		else itemList[i].checked = false
	}
};
ec.minicart.bundls = function(cartInfo) {
	var itemList = cartInfo.itemInfos;
	for(var i = 0; i < itemList.length; i++) {
		var item = itemList[i];
		if(item.itemType == "P")
			for(var j = 0; j < item.subItems.length; j++)
				if(item.subItems[j].itemType == "P")
					if(item.subItems[j].invalidCauseReason != 0) {
						if(item.subItems[j].invalidCauseReason == 7)
							if(item.subItems[j].qty > item.subItems[j].invalidCauseLeftValue) {
								itemList[i].show = "false";
								itemList[i].showP = "false"
							} else;
						else {
							itemList[i].show = "false";
							itemList[i].showP = "false"
						}
						if(item.subItems[j].invalidCauseReason != 7 && item.subItems[j].invalidCauseReason != 8) itemList[i].notbuyLimit = "true"
					}
		if(item.invalidCauseReason != 0)
			if(item.invalidCauseReason == 7)
				if(item.qty > item.invalidCauseLeftValue) itemList[i].show = "false";
				else;
		else itemList[i].show = "false";
		if(item.lost || item.numblimit) itemList[i].show = "false";
		if(item.lost)
			if(item.itemType == "P") itemList[i].showP = "false"
	}
};
ec.minicart.limitnumber = function(item) {
	var limit = item.invalidCauseLeftValue;
	if(limit < 0) limit = 1;
	if(limit == 0)
		if(item.sbom.productLimit != 0 && item.sbom.sbomLimit != 0) return Math.min(item.sbom.productLimit, item.sbom.sbomLimit);
		else if(item.sbom.productLimit != 0) return item.sbom.productLimit;
	else if(item.sbom.sbomLimit != 0) return item.sbom.sbomLimit;
	else return 999;
	return limit
};
ec.minicart.bundleNoBuy = function(cartInfo) {
	var itemList = cartInfo.itemInfos;
	for(var i = 0; i < itemList.length; i++) {
		var qty = itemList[i].qty;
		var qtylimit = [];
		var qtylose = [];
		var qtyJ = [];
		for(var j = 0; j < itemList.length; j++)
			if(itemList[j].itemId != itemList[i].itemId)
				if(itemList[j].itemCode == itemList[i].itemCode) {
					qty += itemList[j].qty;
					qtylimit.push(j)
				} else if(itemList[j].subItems.length > 0)
			for(var k = 0; k < itemList[j].subItems.length; k++)
				if(itemList[j].subItems[k].itemType == "P" && itemList[j].subItems[k].itemCode == itemList[i].itemCode) {
					qty += itemList[j].subItems[k].qty;
					qtylose.push(j)
				}
		if(itemList[i].itemType != "P" && itemList[i].itemType != "DP") {
			var homelimit = ec.minicart.limitnumber(itemList[i]);
			if(qty > homelimit) {
				itemList[i].numblimit = true;
				if(qtylimit.length > 0)
					for(var l = 0; l < qtylimit.length; l++) itemList[qtylimit[l]].numblimit = true;
				if(qtylose.length > 0)
					for(var m = 0; m < qtylose.length; m++) itemList[qtylose[m]].lost = true;
				if(qtyJ.length > 0)
					for(var n = 0; n < qtyJ.length; n++) itemList[qtyJ[n].home].subItems[qtyJ[n].sub].Jlost = true
			}
		}
		if(itemList[i].subItems.length > 0)
			for(var o = 0; o < itemList[i].subItems.length; o++)
				if(itemList[i].subItems[o].itemType == "P") {
					var bundlelimit = ec.minicart.limitnumber(itemList[i].subItems[o]);
					var bqty = itemList[i].qty;
					var bqtylimit = [];
					var bqtylose = [];
					var bqtyJ = [];
					for(var p = 0; p < itemList.length; p++)
						if(itemList[i].itemId != itemList[p].itemId)
							if(itemList[p].itemCode == itemList[i].subItems[o].itemCode) {
								bqty += itemList[p].qty;
								bqtylimit.push(p)
							} else if(itemList[p].subItems.length > 0)
						for(var q = 0; q < itemList[p].subItems.length; q++)
							if(itemList[p].subItems[q].itemType == "P" && itemList[p].subItems[q].itemCode == itemList[i].subItems[o].itemCode) {
								bqty += itemList[p].subItems[q].qty;
								bqtylose.push(p)
							}
					if(bqty > bundlelimit) {
						itemList[i].numblimit = true;
						itemList[i].lost = true;
						if(bqtylimit.length > 0)
							for(var r = 0; r < bqtylimit.length; r++) itemList[bqtylimit[r]].numblimit = true;
						if(bqtylose.length > 0)
							for(var s = 0; s < bqtylose.length; s++) itemList[bqtylose[s]].lost = true;
						if(bqtyJ.length > 0)
							for(var t = 0; t < bqtyJ.length; t++) itemList[bqtyJ[t].home].subItems[bqtyJ[t].sub].Jlost = true
					}
				}
	}
};
ec.minicart.photos = function(cartInfo) {
	var itemList = cartInfo.itemInfos;
	for(var i = 0; i < itemList.length; i++) {
		var item = itemList[i];
		itemList[i].itemkd = item.itemId.replace(/\./g, "-");
		itemList[i].photoName = item.sbom["photoName"];
		itemList[i].photoPath = item.sbom["photoPath"];
		itemList[i].productId = item.sbom["productId"]
	}
};
ec.minicart.setNum = function(num) {
	if("undefined" === typeof num) return false;
	num = parseInt(num) || 0;
	$("#cart-total").html(num);
	if(num > 99) num = "99+";
	$("#header-cart-total").html(num);
	if(num < 1) $(".j-hungBar .hungBar-cart span").html("").hide();
	else $(".j-hungBar .hungBar-cart span").html(num).show()
};
ec.minicart.updateMiniCartNum = function() {
	ec.cart.getMicroCartTotalNumber(function(json) {
		if(json) ec.minicart.setNum(json.data)
	})
};
ec.minicart.readyContent = function() {
	ec.minicart.updateMiniCartNum()
};
ec.minicart.content = function() {
	var callback = function(json) {
		if(json.success) {
			var cartVO = json.cartInfo,
				$cartEmpty = $("#minicart-pro-empty"),
				$cartList = $("#minicart-pro-list-block"),
				$cartSettleup = $("#minicart-pro-settleup");
			var cartInfo = cartVO;
			if(ec.minicart.microCartTpl) {
				var num = 0;
				if(cartInfo.totalNumber == 0) {
					$("#button-minicart-go2confirm").hide();
					$("#disbutton-minicart-go2confirm").show()
				} else {
					$("#button-minicart-go2confirm").show();
					$("#disbutton-minicart-go2confirm").hide()
				}
				if(cartInfo.originalTotalNumber > 0) {
					ec.minicart.setNum(cartInfo.originalTotalNumber);
					$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;" + cartInfo.cashPay.toFixed(2));
					if(cartInfo.originalPrice != cartInfo.cashPay) $("#micro-cart-totalOriginPrice").html("\x26yen;\x26nbsp;" + cartInfo.originalPrice.toFixed(2));
					else $("#micro-cart-totalOriginPrice").html("");
					ec.minicart.photos(json.cartInfo);
					ec.minicart.bundleNoBuy(json.cartInfo);
					ec.minicart.bundls(json.cartInfo);
					for(var i = 0; i < json.cartInfo.itemInfos.length; i++)
						if(json.cartInfo.itemInfos[i].itemName.indexOf("script") > 0) json.cartInfo.itemInfos[i].itemName = safeStr(json.cartInfo.itemInfos[i].itemName);
					json.cartInfo.mediaPath = ec.mediaPath;
					html = ec.minicart.microCartTpl.parse("microCartList", json.cartInfo);
					$("#minicart-goods-list").html(html);
					$cartList.show();
					$cartSettleup.show();
					$cartEmpty.hide();
					if(cartInfo.itemInfos.length > 5) $cartList.addClass("minicart-pro-list-scroll");
					else $cartList.removeClass("minicart-pro-list-scroll");
					for(var i = 0; i < json.cartInfo.itemInfos.length; i++)
						if(json.cartInfo.itemInfos[i].show == "false" && json.cartInfo.itemInfos[i].selected) ec.minicart.dissome(json.cartInfo.itemInfos[i].itemId)
				} else {
					ec.minicart.setNum(0);
					$cartEmpty.show();
					$cartList.hide();
					$cartSettleup.hide()
				}
			}
		} else $("#cartInfo").html("\u5546\u57ce\u706b\u7206\u9500\u552e\u4e2d\uff0c\u8bf7\u60a8\u7a0d\u5019\u518d\u8bd5\u3002")
	};
	ec.cart.getMicroCartFromOrder(function(json) {
		if(!ec.minicartTpl) $.getScript(scriptPath + "/echannel/minicart.min.js", function() {
			ec.minicart.microCartTpl = new ec.template(ec.minicartTpl);
			callback(json)
		});
		else {
			ec.minicart.microCartTpl = new ec.template(ec.minicartTpl);
			callback(json)
		}
	})
};
ec.minicart.click = function(thix) {
	ec.minicart.clickTo(thix)
};
ec.minicart.clickTo = function(thix) {
	ec.minicart.click.send(thix, function(json) {
		if(json.msg == "success") {
			var cartInfo = json.cartInfo.cartVO;
			if(cartInfo.miniTotalNumber > 0) {
				$("#button-minicart-go2confirm").show();
				$("#disbutton-minicart-go2confirm").hide();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;" + cartInfo.miniTotalPrice.toFixed(2));
				if(cartInfo.miniTotalOriginalPrice != cartInfo.miniTotalPrice) $("#micro-cart-totalOriginPrice").html("\x26yen;\x26nbsp;" + cartInfo.miniTotalOriginalPrice.toFixed(2));
				else $("#micro-cart-totalOriginPrice").html("")
			} else {
				$("#button-minicart-go2confirm").hide();
				$("#disbutton-minicart-go2confirm").show();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;0.00");
				$("#micro-cart-totalOriginPrice").html("")
			}
		}
		if(json.resultCode == "200000") {
			var cartInfo = json.data;
			if(cartInfo.totalNumber > 0) {
				$("#button-minicart-go2confirm").show();
				$("#disbutton-minicart-go2confirm").hide();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;" + cartInfo.cashPay.toFixed(2));
				if(cartInfo.cashPay != cartInfo.originalPrice) $("#micro-cart-totalOriginPrice").html("\x26yen;\x26nbsp;" + cartInfo.originalPrice.toFixed(2));
				else $("#micro-cart-totalOriginPrice").html("")
			} else {
				$("#button-minicart-go2confirm").hide();
				$("#disbutton-minicart-go2confirm").show();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;0.00");
				$("#micro-cart-totalOriginPrice").html("")
			}
		}
	})
};
ec.minicart.convertToCart = function(argList) {
	var sbs = [],
		types = [],
		qtys = [],
		ess = [],
		gfs = [],
		ops = [];
	for(var i = 0; i < argList.length; i++) {
		orderItem = argList[i];
		if(orderItem.itemType == "S0") {
			sbs.push(orderItem.itemId);
			if(orderItem.itemProp && orderItem.itemProp["Internal_Purchase"] && orderItem.itemProp["Internal_Purchase"] == "true") types.push(8);
			else types.push(1);
			qtys.push(orderItem.qty);
			ess.push("");
			var gifts = [];
			if(orderItem.gifts && orderItem.gifts.length > 0)
				for(var g = 0; g < orderItem.gifts.length; g++) gifts.push(orderItem.gifts[g].sbomCode);
			gfs.push(gifts.join("-"));
			ops.push(orderItem.operation)
		}
		if(orderItem.itemType == "S1") {
			sbs.push(orderItem.itemId);
			types.push(6);
			qtys.push(orderItem.qty);
			ess.push(orderItem.mainItemid);
			gfs.push("");
			ops.push(orderItem.operation)
		}
		if(orderItem.itemType == "S6") {
			sbs.push(orderItem.itemId);
			types.push(7);
			qtys.push(orderItem.qty);
			ess.push(orderItem.mainItemid);
			gfs.push("");
			ops.push(orderItem.operation)
		}
		if(orderItem.itemType == "20") {
			sbs.push(orderItem.itemId);
			types.push(20);
			qtys.push(orderItem.qty);
			ess.push(orderItem.mainItemid);
			gfs.push("");
			ops.push(orderItem.operation)
		}
	}
	var data = {};
	data.sbs = sbs.join(",");
	data.types = types.join(",");
	data.qtys = qtys.join(",");
	data.ess = ess.join(",");
	data.gfs = gfs.join(",");
	data.ops = ops.join(",");
	return data
};
ec.minicart.click.send = function(thix, callback) {
	var url;
	var id = $(thix).attr("value"),
		type = $(thix).attr("type"),
		operation = 5;
	var itemId = $(thix).attr("data-itemId").replace(/\./g, "-");
	ec.minicart.checkboxInverse(itemId);
	$("#button-minicart-go2confirm").show();
	$("#disbutton-minicart-go2confirm").hide();
	var operation = 5;
	if($("#icon-choose-" + itemId).hasClass("icon-choose") && $("#checkbox-" + itemId).attr("checked")) operation = 5;
	else operation = 6;
	var data = {
		lang: "zh-CN",
		country: mallCountry,
		portal: 1
	};
	var lists = [];
	lists.push($(thix).attr("data-itemId"));
	data.mainItemIds = JSON.stringify(lists);
	if(operation == 5) url = openApiDomain + "/mcp/v1/selectCartItem";
	else url = openApiDomain + "/mcp/v1/disselectCartItem";
	$.ajax({
		url: url,
		type: "post",
		dataType: "json",
		contentType: "text/plain",
		timeout: 1E4,
		traditional: true,
		data: JSON.stringify(data),
		success: function(result) {
			result.data = result.cartInfo;
			result.resultCode = result.success ? "200000" : "999999";
			result.info = result.success ? "success" : "error";
			callback(result)
		}
	})
};
ec.minicart.dissome = function(paras) {
	ec.minicart.dissomeTO(paras)
};
ec.minicart.dissomeTO = function(paras) {
	ec.minicart.dissome.send(paras, function(json) {
		if(json.resultCode == "200000") {
			var cartInfo = json.data;
			if(cartInfo.totalNumber > 0) {
				$("#button-minicart-go2confirm").show();
				$("#disbutton-minicart-go2confirm").hide();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;" + cartInfo.cashPay.toFixed(2));
				if(cartInfo.cashPay != cartInfo.originalPrice) $("#micro-cart-totalOriginPrice").html("\x26yen;\x26nbsp;" + cartInfo.originalPrice.toFixed(2));
				else $("#micro-cart-totalOriginPrice").html("")
			} else {
				$("#button-minicart-go2confirm").hide();
				$("#disbutton-minicart-go2confirm").show();
				$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;0.00");
				$("#micro-cart-totalOriginPrice").html("")
			}
		}
	})
};
ec.minicart.dissome.send = function(paras, callback) {
	var url;
	var data = {
		lang: "zh-CN",
		country: mallCountry,
		portal: 1
	};
	var lists = [];
	lists.push(paras);
	data.mainItemIds = JSON.stringify(lists);
	url = openApiDomain + "/mcp/v1/disselectCartItem";
	$.ajax({
		url: url,
		type: "post",
		dataType: "json",
		contentType: "text/plain",
		timeout: 1E4,
		traditional: true,
		data: JSON.stringify(data),
		success: function(result) {
			result.data = result.cartInfo;
			result.resultCode = result.success ? "200000" : "999999";
			result.info = result.success ? "success" : "error";
			callback(result)
		}
	})
};
ec.minicart.selectedItemIsEmpty = function() {
	var selected = $("#minicart-goods-list input[name\x3d'skuIds']:checked").length + $("#minicart-goods-list input[name\x3d'bundleIds']:checked").length;
	if(selected == 0) {
		ec.minicart.setNum(0);
		$("#micro-cart-totalPrice").html("\x26yen;\x26nbsp;0.00");
		$("#micro-cart-totalOriginPrice").html("");
		$("#button-minicart-go2confirm").hide();
		$("#disbutton-minicart-go2confirm").show();
		return true
	}
	return false
};
ec.minicart.checkboxInverse = function(itemId) {
	if($("#icon-choose-" + itemId).hasClass("icon-choose")) {
		$("#icon-choose-" + itemId).removeClass("icon-choose").addClass("icon-choose-normal");
		$("#checkbox-" + itemId).prop("checked", false)
	} else {
		$("#icon-choose-" + itemId).removeClass("icon-choose-normal").addClass("icon-choose");
		$("#checkbox-" + itemId).prop("checked", true)
	}
};
ec.minicart.buildOrderItemReqArgList = function() {
	var $skus = $("#minicart-goods-list input[name\x3d'skuIds']:checked");
	var $bundles = $("#minicart-goods-list input[name\x3d'bundleIds']:checked");
	var orderItemReqArgList = [];
	$skus.each(function() {
		var $tbody = $(this).closest("li");
		var id = this.value;
		var qty = $("#quantity-" + id, $tbody).val();
		var type = $("#quantity-" + id, $tbody).attr("data-type");
		var orderitem = {};
		var extendItem = {};
		var accidentItem = {};
		var giftItem = {};
		var extendId = $('input[name\x3d"extendIds"]', $tbody).val();
		if(extendId) {
			extendItem.itemId = extendId;
			extendItem.qty = qty;
			extendItem.itemType = "S1";
			extendItem.mainItemid = id;
			orderItemReqArgList.push(extendItem)
		}
		var accidentId = $('input[name\x3d"accidentIds"]', $tbody).val();
		if(accidentId) {
			accidentItem.itemId = accidentId;
			accidentItem.qty = qty;
			accidentItem.itemType = "S6";
			accidentItem.itemProp = {
				"accidentItem": id
			};
			accidentItem.mainItemid = id;
			orderItemReqArgList.push(accidentItem)
		}
		if(qty) {
			orderitem.itemId = id;
			orderitem.qty = qty;
			if(type == "1") orderitem.itemType = "S0";
			if(type == "8") {
				orderitem.itemType = "S0";
				orderitem.itemProp = {
					"Internal_Purchase": "true"
				}
			}
			var giftSbomCodes = $("#gift_sbomCodes_" + id).val();
			if(giftSbomCodes) {
				var gifts = [];
				var sbomCodes = giftSbomCodes.split(",");
				for(var i = 0; i < sbomCodes.length; i++)
					if(sbomCodes[i] != "") {
						var gift = {};
						gift.sbomCode = sbomCodes[i];
						gifts.push(gift)
					}
				orderitem.gifts = gifts
			}
			orderItemReqArgList.push(orderitem)
		}
	});
	$bundles.each(function() {
		var $tbody = $(this).closest("li");
		var id = this.value;
		var qty = $("#quantity-" + id, $tbody).val();
		var type = $("#quantity-" + id, $tbody).attr("data-type");
		var orderitem = {};
		if(qty) {
			orderitem.itemId = id;
			orderitem.qty = qty;
			orderItemReqArgList.push(orderitem)
		}
	});
	return orderItemReqArgList
};
ec.minicart.confirm = function() {
	var $skus = $("#minicart-goods-list input[name\x3d'skuIds']:checked");
	var $bundles = $("#minicart-goods-list input[name\x3d'bundleIds']:checked");
	if($skus.length == 0 && $bundles.length == 0) {
		alert("\u8bf7\u81f3\u5c11\u9009\u4e2d\u4e00\u4e2a\u5546\u54c1\uff01");
		return
	}
	if(!ec.account.isLogin()) ec.redirectTo($("#top-index-loginUrl").attr("href"));
	var orderItemReqArgList = [];
	$skus.each(function() {
		var itemId = $(this).attr("data-itemId").replace(/\./g, "-");
		var $tbody = $(this).closest("li");
		var id = this.value;
		var skuCode = $(this).attr("data-scode");
		var qty = $("#quantity-" + id, $tbody).val();
		var type = $("#quantity-" + id, $tbody).attr("data-type");
		var bundle = $("#bundle-" + itemId).val();
		var orderitem = {};
		var extendItem = {};
		var accidentItem = {};
		if(qty) {
			orderitem.itemId = skuCode;
			orderitem.qty = qty;
			orderitem.itemType = type;
			orderitem.id = $(this).attr("data-itemId");
			if(type == "P") {
				var packageCodeList = {
					"package_code": bundle
				};
				orderitem.itemProp = packageCodeList
			}
			var $gifts = $('input[name\x3d"giftId"]', $tbody);
			if($gifts.length > 0) {
				var gifts2Order = [];
				$gifts.each(function() {
					var aGift = {
						"sbomCode": this.value
					};
					var gGroup = $(this).attr("data-group");
					if(gGroup) aGift.group = gGroup;
					var gActId = $(this).attr("data-actid");
					if(gActId) aGift.actId = gActId;
					var gType = $(this).attr("data-type");
					if(gType) aGift.type = gType;
					gifts2Order.push(aGift)
				});
				orderitem.gifts = gifts2Order
			}
			orderitem.subOrderItemReqArgs = [];
			var $newBundle = $("#bundle-" + itemId).attr("data-scode");
			if($newBundle) {
				orderitem.subOrderItemReqArgs = [];
				$.each($newBundle.split(","), function(index, value) {
					if(value != "") {
						var apack = {
							"itemId": value,
							"qty": qty,
							"itemType": "P"
						};
						orderitem.subOrderItemReqArgs.push(apack)
					}
				})
			}
			if(orderitem.itemType === "DP") {
				var $dpobj = $("#dpPackage-" + itemId);
				orderitem.itemProp = {
					dp_package_code: $dpobj.attr("data-dpcode")
				};
				$.each($dpobj.val().split("|"), function(index, value) {
					if(value != "") {
						var dpsub = value.split(",");
						orderitem.subOrderItemReqArgs.push({
							itemId: dpsub[0],
							qty: qty,
							itemType: "DP",
							itemProp: {
								dp_group: dpsub[1]
							}
						})
					}
				})
			}
			var extendId = $('input[name\x3d"extendIds"]', $tbody).attr("data-scode");
			if(extendId) {
				extendItem.itemId = extendId;
				extendItem.qty = qty;
				extendItem.itemType = "S1";
				extendItem.mainSkuCode = skuCode;
				orderitem.subOrderItemReqArgs.push(extendItem)
			}
			var accidentId = $('input[name\x3d"accidentIds"]', $tbody).attr("data-scode");
			if(accidentId) {
				accidentItem.itemId = accidentId;
				accidentItem.qty = qty;
				accidentItem.itemType = "S6";
				accidentItem.mainSkuCode = skuCode;
				orderitem.subOrderItemReqArgs.push(accidentItem)
			}
			var ucareId = $('input[name\x3d"ucareIds"]', $tbody).attr("data-scode");
			if(ucareId) {
				var subItem = {};
				subItem.itemId = ucareId;
				subItem.qty = qty;
				subItem.itemType = "S15";
				subItem.mainSkuCode = skuCode;
				orderitem.subOrderItemReqArgs.push(subItem)
			}
			orderItemReqArgList.push(orderitem)
		}
	});
	$bundles.each(function() {
		var $tbody = $(this).closest("li");
		var id = this.value;
		var qty = $("#quantity-" + id, $tbody).val();
		var type = $("#quantity-" + id, $tbody).attr("data-type");
		var orderitem = {};
		if(qty) {
			orderitem.itemId = id;
			orderitem.qty = qty;
			orderitem.itemType = type;
			orderItemReqArgList.push(orderitem)
		}
	});
	var jsonReqArg = ec.lang.json.stringify(orderItemReqArgList);
	setTimeout(function() {
		ec.cart.confirm(1, jsonReqArg)
	}, 500)
};
ec.pkg("ec.product");
ec.product.history = {
	lastBroswedCount: function() {
		if("undefined" === typeof lastBroswedCount) return 2;
		return parseInt(lastBroswedCount) || 10
	},
	load: function(callback) {
		var pids = localStorage.getItem("product_view_history") || "";
		var pids = pids.split(",");
		if(pids[0] === ec.product.id) pids.shift();
		pids = pids.slice(0, this.lastBroswedCount());
		pids = pids.join(",");
		if(pids.length < 1) {
			callback([]);
			return false
		}
		$.ajax({
			url: "/product/browsed/query.json",
			method: "post",
			dataType: "json",
			data: {
				pids: pids
			},
			success: function(json) {
				if(!json.success) return;
				callback(json.list || [])
			},
			error: function() {
				callback([])
			}
		})
	},
	add: function(id) {
		id = "" + id;
		var ids = localStorage.getItem("product_view_history") || "";
		var ids = ids.split(",");
		var r = [];
		ids.forEach(function(v) {
			if(v && v !== id && r.indexOf(v) < 0) r.push(v)
		});
		r.unshift(id);
		r = r.slice(0, this.lastBroswedCount() + 1);
		ids = r.join(",");
		localStorage.setItem("product_view_history", ids)
	},
	clear: function(callback) {
		localStorage.removeItem("product_view_history");
		if("function" === typeof callback) callback()
	}
};
ec.product.inventory = {
	_data: {},
	loaded: false,
	set: function(id, haveInventory) {
		this._data[id] = haveInventory;
		setTimeout(function() {
			ec.product.inventory.loaded = true
		})
	},
	haveInventory: function(id) {
		return this._data[id]
	},
	wait: function(callback) {
		if(this.loaded) callback();
		else setTimeout(function() {
			ec.product.inventory.wait(callback)
		}, 15)
	}
};
ec.product.getSysDate = function() {
	var now = new Date;
	$.ajax({
		async: false,
		url: "/system/getSysDate.json?" + (new Date).getTime(),
		timeout: 1E4,
		success: function(json) {
			if(!ec.util.isEmpty(json.now)) now.setTime(ec.util.parseDate(json.now))
		}
	});
	return now
};
ec.pkg("ec.cart");
ec.cart.productTypeCorrespondence = function(productType) {
	if(productType == 1) productType = "S0";
	else if(productType == 6) productType = "S1";
	else if(productType == 7) productType = "S6";
	else if(productType == 8) productType = "S0";
	else if(productType == 20) productType = "20";
	else productType = "S0";
	return productType
};
ec.cart.dap = function(link, buttonName, cartData) {
	if(!cartData) cartData = (ec.product.finalGift() || {}).cartjson;
	if("string" === typeof cartData) cartData = parseJSON(cartData) || {};
	var dapData = {
		productId: ec.product.id,
		buttonName: buttonName || "\u52a0\u5165\u8d2d\u7269\u8f66",
		SKUCode: cartData.itemCode + "," + cartData.qty,
		packageCode: "",
		packageSKUCode: [],
		DPcode: "",
		GPcode: [],
		DPSKUCode: [],
		giftGroupID: "",
		giftSKUCode: [],
		colSKU: [],
		click: 1
	};
	if(cartData.itemType === "P" && cartData.attrs) dapData.packageCode = cartData.attrs.package_code + "," + cartData.qty;
	if(cartData.itemType === "DP" && cartData.attrs) dapData.DPcode = cartData.attrs.dp_package_code + "," + cartData.qty;
	if(cartData.subs) cartData.subs.forEach(function(v) {
		if(v.itemType === "P") dapData.packageSKUCode.push(v.itemCode + "," + v.qty);
		else if(v.itemType === "DP") {
			dapData.DPSKUCode.push(v.itemCode + "," + v.qty);
			if(v.attrs && v.attrs.dp_group && dapData.GPcode.indexOf(v.attrs.dp_group) < 0) dapData.GPcode.push(v.attrs.dp_group)
		} else if(v.itemType === "G") {
			dapData.giftSKUCode.push(v.itemCode + "," + v.qty);
			if(v.attrs && v.attrs.g_group) dapData.giftGroupID = v.attrs.g_group
		} else dapData.colSKU.push(v.itemCode + "," + v.qty)
	});
	ec.dapClick(link, dapData)
};
ec.cart.add = function(paras, options) {
	var data = {};
	var cartNumber = "add.json";
	if(paras.number == 1) {
		cartNumber = "addMulti.json";
		data.mainItems = paras.cartjson
	} else data.mainItem = paras.cartjson;
	$.ajax({
		url: openApiDomain + "/cart/v1/" + cartNumber,
		dataType: "json",
		contentType: "text/plain",
		type: "post",
		timeout: 3E4,
		traditional: true,
		data: JSON.stringify(data),
		success: function(result) {
			if(result.resultCode != 2E5) {
				if(options.errorFunction) {
					result.msg = "\u5df2\u8d85\u8d2d\u7269\u8f66\u6570\u91cf\u4e0a\u9650\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u7acb\u5373\u4e0b\u5355";
					options.errorFunction(result)
				}
				return
			}
			if(options.successFunction) {
				ec.util.cookie.set("cartAdded", ec.util.cookie.get("cartId"));
				options.successFunction(result)
			}
		},
		error: function(xhr, msg, e) {
			if(options.errorFunction) {
				var result = {};
				result.msg = "\u8d2d\u7269\u8f66\u7e41\u5fd9\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u7acb\u5373\u4e0b\u5355";
				if("/member/enterprise" === location.pathname) result.msg = "\u8d2d\u7269\u8f66\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5";
				if(xhr && xhr.responseJSON && xhr.responseJSON.resultCode === "200917") result.msg = "\u9875\u9762\u5df2\u5931\u6548\uff0c\u8bf7\u60a8\u5237\u65b0\u9875\u9762\u540e\u91cd\u65b0\u64cd\u4f5c";
				options.errorFunction(result)
			}
		}
	})
};
ec.cart.getCartTotalNumber = function(callback, optional) {
	if(!ec.util.cookie.get("cartId") && !ec.account.isLogin()) return;
	$.ajax({
		url: openApiDomain + "/cart/v1/getTotalNum.json?t\x3d" + (new Date).getTime() + "\x26saleChannel\x3d1001\x26salePortal\x3d1",
		dataType: "json",
		timeout: 1E4,
		success: function(json) {
			if(json.resultCode == 2E5) callback(json, optional);
			else callback(null, optional)
		}
	})
};
ec.cart.getCartItemsInternal = function(callback, optional) {
	var cartId = ec.util.cookie.get("cartId");
	if(ec.util.cookie.get("salePortal") != 1) document.cookie = "salePortal\x3d1; domain\x3d." + mallDomain + "; path\x3d/";
	$.ajax({
		url: openApiDomain + "/mcp/queryCart",
		dataType: "json",
		data: {
			lang: "zh-CN",
			country: mallCountry,
			portal: 1
		},
		timeout: 1E4,
		success: function(json) {
			if(json && json.success && json.cartInfo && json.cartInfo.itemInfos) json.cartInfo.itemInfos.forEach(function(item) {
				if(item.itemType == "DP")
					if(item.invalidCauseReason == 6) item.invalidCauseReason = 106;
					else if(item.invalidCauseReason == 7) {
					if(!item.numblimit) item.invalidCauseReason = 101
				} else if(item.invalidCauseReason > 0) item.invalidCauseReason = 101;
				if(item.itemType == "P")
					if(item.invalidCauseReason == 6) item.invalidCauseReason = 106;
					else if(item.invalidCauseReason == 7) {
					if(!item.numblimit) item.invalidCauseReason = 101
				} else if(item.invalidCauseReason > 0) item.invalidCauseReason = 101;
				else {
					var subItems = item.subItems;
					for(var i = 0; i < subItems.length; i++)
						if(subItems[i].itemType == "P" && subItems[i].invalidCauseReason > 0) item.invalidCauseReason = 101
				}
				item.subItems = item.subItems || [];
				var subItems = item.subItems;
				var giftInvalidCauseReason = 0;
				for(var i = 0; i < subItems.length; i++)
					if(subItems[i].itemType == "G" && subItems[i].invalidCauseReason > 0 && subItems[i].attrsMap && subItems[i].attrsMap.g_group) {
						giftInvalidCauseReason = subItems[i].invalidCauseReason;
						break
					}
				if(giftInvalidCauseReason > 0)
					for(var i = 0; i < subItems.length; i++)
						if(subItems[i].itemType == "G" && subItems[i].attrsMap && subItems[i].attrsMap.g_group) subItems[i].invalidCauseReason = giftInvalidCauseReason
			});
			callback(json, optional)
		}
	});
	ec.minicart.updateMiniCartNum()
};
ec.cart.getCartItems = function(callback, optional) {
	var cartId = ec.util.cookie.get("cartId");
	if(cartId && cartId.length > 0) {
		var isValCas = ec.util.cookie.get("isValCas");
		if(isValCas && "false" == isValCas) {
			$.ajax({
				url: "/account/load",
				type: "POST"
			});
			isValCas = ec.util.cookie.get("isValCas")
		}
		if(ec.account.isLogin() && ec.account.id && ec.account.loginName) ec.cart.doCache2cart(ec.cart.getCartItemsInternal, callback, optional);
		else ec.cart.getCartItemsInternal(callback, optional)
	} else ec.cart.getCartItemsInternal(callback, optional)
};
ec.cart.buildQueryData = function(cartItems) {
	var ids = [];
	var types = [];
	var quantitys = [];
	var mainskus = [];
	for(var i = 0; i < cartItems.length; i++) {
		var cartItem = cartItems[i];
		if(cartItem.skuId) ids.push(cartItem.skuId);
		else if(cartItem.bundleId) ids.push(cartItem.bundleId);
		else continue;
		types.push(cartItem.productType);
		quantitys.push(cartItem.quantity);
		if(cartItem.mainSkuId) mainskus.push(cartItem.mainSkuId);
		else mainskus.push("")
	}
	var date = new Date;
	return {
		sbs: ids.join(","),
		types: types.join(","),
		qtys: quantitys.join(","),
		ess: mainskus.join(","),
		t: date.getTime()
	}
};
ec.cart.getOnceCartInfo = function(cartItems, callback, i) {
	var data = ec.cart.buildQueryData(cartItems);
	$.ajax({
		url: domainMain + "/order/shoppingCart/newCart.json",
		dataType: "json",
		timeout: 1E4,
		traditional: true,
		data: data,
		success: function(result) {
			if(i != null) callback(result, i);
			else if(!result.success || !result.cartInfo) return;
			else callback(result)
		},
		error: function() {
			if(i != null) {
				var result = {};
				result.success = false;
				callback(result, i)
			}
		}
	})
};
ec.cart.batchCount = 50;
ec.cart.getCartInfo = function(cartItems, callback) {
	if(!cartItems || cartItems.length == 0) {
		callback({});
		return
	}
	if(cartItems.length <= ec.cart.batchCount) ec.cart.getOnceCartInfo(cartItems, callback);
	else {
		var batchs = [];
		var currentBundleBatch = [];
		var currentSkuBatch = [];
		outer: for(var i = 0; i < cartItems.length; i++) {
			var cartItem = cartItems[i];
			if(cartItem.productType == 1) {
				currentSkuBatch.push(cartItem);
				if(currentSkuBatch.length == ec.cart.batchCount) {
					batchs.push(currentSkuBatch);
					currentSkuBatch = []
				}
			} else if(cartItem.productType == 6) {
				for(var j = 0; j < batchs.length; j++) {
					var batch = batchs[j];
					if(batch[0].productType == 1)
						for(var k = 0; k < batch.length; k++)
							if(batch[k].skuId == cartItem.mainSkuId) {
								batch.push(cartItem);
								continue outer
							}
				}
				for(var j = 0; j < currentSkuBatch.length; j++)
					if(currentSkuBatch[j].skuId == cartItem.mainSkuId) currentSkuBatch.push(cartItem)
			} else {
				currentBundleBatch.push(cartItem);
				if(currentBundleBatch.length == ec.cart.batchCount) {
					batchs.push(currentBundleBatch);
					currentBundleBatch = []
				}
			}
		}
		if(currentBundleBatch.length > 0)
			if(currentBundleBatch.length + currentSkuBatch.length <= ec.cart.batchCount) {
				currentBundleBatch.push(currentSkuBatch);
				batchs.push(currentBundleBatch)
			} else {
				batchs.push(currentBundleBatch);
				batchs.push(currentSkuBatch)
			}
		else if(currentSkuBatch.length > 0) batchs.push(currentSkuBatch);
		var total = {};
		total.cartInfo = {};
		total.cartInfo.bundlerList = [];
		total.cartInfo.productList = [];
		total.cartInfo.couponList = [];
		total.cartInfo.premiumsList = [];
		total.cartInfo.totalOriginalPrice = 0;
		total.cartInfo.totalPrice = 0;
		total.limitstock = [];
		total.understock = [];
		var got = 0;
		for(var i = 0; i < batchs.length; i++) {
			var batch = batchs[i];
			ec.cart.getOnceCartInfo(batch, function(result, i) {
				got += 1;
				if(result.success && result.cartInfo) {
					if(result.cartInfo.bundlerList && result.cartInfo.bundlerList.length > 0) total.cartInfo.bundlerList = total.cartInfo.bundlerList.concat(result.cartInfo.bundlerList);
					if(result.cartInfo.productList && result.cartInfo.productList.length > 0) total.cartInfo.productList = total.cartInfo.productList.concat(result.cartInfo.productList);
					if(result.cartInfo.couponList && result.cartInfo.couponList.length > 0) total.cartInfo.couponList = total.cartInfo.couponList.concat(result.cartInfo.couponList);
					if(result.cartInfo.premiumsList && result.cartInfo.premiumsList.length > 0) total.cartInfo.premiumsList = total.cartInfo.premiumsList.concat(result.cartInfo.premiumsList);
					total.cartInfo.totalOriginalPrice += result.cartInfo.totalOriginalPrice;
					total.cartInfo.totalPrice += result.cartInfo.totalPrice;
					if(result.limitstock && result.limitstock.length > 0) total.limitstock = total.limitstock.concat(result.limitstock);
					if(result.understock && result.understock.length > 0) total.understock = total.understock.concat(result.understock)
				}
				if(got == batchs.length) callback(total)
			}, i)
		}
	}
};
ec.cart.buildMicroCartReq = function(cartItems) {
	var orderItemReqArgList = [];
	if(cartItems && cartItems.length > 0)
		for(var i = 0; i < cartItems.length; i++) {
			var cartItem = cartItems[i];
			var orderitem = {};
			orderitem.itemId = cartItem.skuId;
			orderitem.qty = cartItem.quantity;
			if(cartItem.productType == "1") {
				orderitem.itemType = "S0";
				var gifts2Order = [];
				if(cartItem.giftCartList && cartItem.giftCartList.length > 0)
					for(var j = 0; j < cartItem.giftCartList.length; j++) {
						var aGift = {
							"sbomCode": cartItem.giftCartList[j].skuId
						};
						gifts2Order.push(aGift)
					}
				orderitem.gifts = gifts2Order
			}
			if(cartItem.productType == "8") {
				orderitem.itemType = "S0";
				orderitem.itemProp = {
					"Internal_Purchase": "true"
				}
			}
			if(cartItem.productType == "6") {
				orderitem.itemType = "S1";
				orderitem.itemProp = {
					"main_skucode": cartItem.mainSkuId
				}
			}
			if(cartItem.productType == "7") {
				orderitem.itemType = "S6";
				orderitem.itemProp = {
					"main_skucode": cartItem.mainSkuId
				}
			}
			orderItemReqArgList.push(orderitem)
		}
	var jsonReqArg = ec.lang.json.stringify(orderItemReqArgList);
	var date = new Date;
	var data = {};
	data.cartReqJson = jsonReqArg;
	data.t = date.getTime();
	return data
};
ec.cart.getMicroCartBaseInfo = function() {};
ec.cart.doCache2cart = function(doAfterCache, callback, optional) {
	var cartId = ec.util.cookie.get("cartId");
	var cartAdded = ec.util.cookie.get("cartAdded");
	if(!cartAdded || cartAdded != cartId) {
		ec.util.cookie.set("cartId", null, {
			"expires": -1,
			domain: mallDomain
		});
		if(doAfterCache) doAfterCache(callback, optional);
		return
	}
	$.ajax({
		url: openApiDomain + "/cart/v1/guest2cart.json?t\x3d" + (new Date).getTime(),
		type: "post",
		dataType: "json",
		timeout: 1E4,
		cache: false,
		success: function(json) {
			if(doAfterCache) doAfterCache(callback, optional)
		}
	})
};
ec.cart.getMicroCartTotalNumber = function(callback) {
	var optional = null;
	var cartId = ec.util.cookie.get("cartId");
	if(cartId && cartId.length > 0) {
		var isValCas = ec.util.cookie.get("isValCas");
		if(isValCas && "false" == isValCas) {
			$.ajax({
				url: "/account/load",
				type: "POST"
			});
			isValCas = ec.util.cookie.get("isValCas")
		}
		if(ec.account.isLogin()) ec.cart.doCache2cart(ec.cart.getCartTotalNumber, callback, optional);
		else ec.cart.getCartTotalNumber(callback, optional)
	} else ec.cart.getCartTotalNumber(callback, optional)
};
ec.cart.getMicroCartFromOrder = function(callback) {
	var optional = null;
	var cartId = ec.util.cookie.get("cartId");
	if(cartId && cartId.length > 0) {
		var isValCas = ec.util.cookie.get("isValCas");
		if(isValCas && "false" == isValCas) {
			$.ajax({
				url: "/account/load",
				type: "POST"
			});
			isValCas = ec.util.cookie.get("isValCas")
		}
		if(ec.account.isLogin()) ec.cart.doCache2cart(ec.cart.getCartItemsInternal, callback, optional);
		else ec.cart.getCartItemsInternal(callback, optional)
	} else ec.cart.getCartItemsInternal(callback, optional)
};
ec.cart.changeAdded = function(json) {
	var cartNumber = null;
	if(json && json.cartInfo && json.cartInfo.cartVO) cartNumber = json.cartInfo.cartVO.totalNumber >= 0 ? json.cartInfo.cartVO.totalNumber : cartNumber;
	if(json) cartNumber = json.cartNumber >= 0 ? json.cartNumber : cartNumber;
	if(cartNumber > 0) ec.util.cookie.set("cartAdded", ec.util.cookie.get("cartId"));
	if(cartNumber == 0) ec.util.cookie.set("cartAdded", null)
};
ec.cart.setRecover = function(recover) {
	ec.util.cookie.set("cart-recover", recover, {
		domain: mallDomain,
		path: "/"
	})
};
ec.cart.removeSkuFromRecover = function(skuId, callback) {
	var recover = ec.util.cookie.get("cart-recover");
	if(recover) {
		var rege = new RegExp("," + skuId + ";\\d+,");
		recover = recover.replace(rege, ",");
		ec.cart.setRecover(recover)
	}
	if(callback) callback(recover)
};
ec.cart.confirm = function(state, jsonReqArg, orderTag) {
	var $form = $("#miniCartForm");
	$form.append('\x3cinput name\x3d"orderReqJson" type\x3d"hidden" value\x3d\'' + jsonReqArg + "' /\x3e");
	if(state) $form.append('\x3cinput name\x3d"state" type\x3d"hidden" value\x3d"' + state + '" /\x3e');
	if(orderTag) $form.append('\x3cinput name\x3d"routingTag" type\x3d"hidden" value\x3d"' + orderTag + '" /\x3e');
	$form.submit()
};
ec.pkg("ec.base");
ec.base.findSearchHotWordUrl = function(v) {
	var actUrl = "";
	for(var swa = 0; swa < ec.search.searchArr.length; swa++) {
		var swal = ec.search.searchArr[swa];
		if(v == swal.word.transHtmlAttribute())
			if(swal.isActivityWords == 1)
				if(swal.activityUrl) actUrl = swal.activityUrl.transHtmlAttribute()
	}
	return actUrl
};

function pushMsgAssociationalWord(word, urlType) {
	ec.dapClick(300090101, {
		"searchWord": word,
		"type": "4",
		"urlType": urlType,
		"click": "1"
	})
}
var topSearchKeyword = "";

function search(form) {
	var v = $("#search-kw").val();
	if(ec.util.isEmpty(v)) return false;
	v = $.trim(v);
	ec.dapClick(300090101, {
		"searchWord": v,
		"type": "1",
		"urlType": 1,
		"click": "1"
	});
	var searchUrl = ec.base.findSearchHotWordUrl(v);
	if(searchUrl) ec.openWindow(searchUrl);
	else ec.postTo("/search", {
		keyword: ec.filteredTxt(v)
	}, "_blank");
	return false
}

function searchFunc(word) {
	ec.dapClick(300090101, {
		"searchWord": word,
		"type": "2",
		"urlType": 1,
		"click": "1"
	});
	ec.postTo("/search", {
		keyword: ec.filteredTxt(word)
	}, "_blank")
}(function() {
	var _flag;
	ec.ready(function() {
		$("#ec_ui_confirm_no").unbind("click").click(function() {
			$("#ec_ui_confirm").hide()
		});
		$("#ec_ui_confirm_new_no").unbind("click").click(function() {
			$("#ec_ui_confirm_new").hide()
		});
		$("#ec_ui_tips_yes").unbind("click").click(function() {
			$("#ec_ui_tips").hide()
		})
	});
	ec.ui.confirm = function(dom, msg) {
		var caller = ec.ui.confirm.caller,
			arguments = caller.arguments;
		if(_flag != null && arguments[arguments.length - 1] == _flag) {
			_flag = null;
			return true
		}
		$("#ec_ui_confirm_msg").html(msg);
		var thix = $(dom),
			layter = $("#ec_ui_confirm"),
			offset = thix.offset(),
			top = offset.top - layter.outerHeight(true) - 5,
			left = offset.left - layter.outerWidth(true) / 2,
			args = [],
			aLen = arguments.length,
			dLen = arguments.callee.length;
		for(var i = 0; i < aLen; i++) args.push(arguments[i]);
		args[dLen] = _flag = (new Date).getTime();
		$("#ec_ui_confirm_yes").unbind("click").click(function() {
			$("#ec_ui_confirm").hide();
			caller.apply(this, args);
			args = null
		});
		layter.css({
			top: top,
			left: left,
			position: "absolute"
		}).show();
		layter.css("z-index", "999");
		return false
	};
	ec.ui.confirmNew = function(dom, msg, btnMsgYes, btnMsgNo) {
		var caller = ec.ui.confirmNew.caller,
			arguments = caller.arguments;
		if(_flag != null && arguments[arguments.length - 1] == _flag) {
			_flag = null;
			return true
		}
		$("#ec_ui_confirm_new_msg").html(msg);
		if(btnMsgYes) {
			$("#ec_ui_confirm_new_yes").attr("title", btnMsgYes);
			$("#ec_ui_confirm_new_yes").html("\x3cspan\x3e" + btnMsgYes + "\x3c/span\x3e")
		}
		if(btnMsgNo) {
			$("#ec_ui_confirm_new_no").attr("title", btnMsgNo);
			$("#ec_ui_confirm_new_no").html("\x3cspan\x3e" + btnMsgNo + "\x3c/span\x3e")
		}
		var thix = $(dom),
			layter = $("#ec_ui_confirm_new"),
			offset = thix.offset(),
			top = offset.top - layter.outerHeight(true) - 5,
			left = offset.left - layter.outerWidth(true) / 9,
			args = [],
			aLen = arguments.length,
			dLen = arguments.callee.length;
		for(var i = 0; i < aLen; i++) args.push(arguments[i]);
		args[dLen] = _flag = (new Date).getTime();
		$("#ec_ui_confirm_new_yes").unbind("click").click(function() {
			$("#ec_ui_confirm_new").hide();
			caller.apply(this, args);
			args = null
		});
		layter.css({
			top: top,
			left: left,
			position: "absolute"
		}).show();
		return false
	};
	ec.ui.tips = function(dom, msg) {
		$("#ec_ui_tips_msg").html(msg);
		var thix = $(dom),
			layter = $("#ec_ui_tips"),
			offset = thix.offset(),
			top = offset.top - layter.outerHeight(true) - 5,
			left = offset.left - layter.outerWidth(true) / 2;
		layter.css({
			top: top,
			left: left,
			position: "absolute"
		}).show()
	}
})();
$.extend(ec.form.validator.defaults, {
	errorClass: "error",
	autoFocus: false,
	errorFunction: function(obj, options) {
		var css = "icon-error",
			msg = options.msg[options.type] || options.msg["default"];
		msg = msg.length <= 0 ? "\x26nbsp;" : msg;
		switch(options.type) {
			case "require":
				css = "icon-warn";
				break
		}
		if(options.msg_ct) $(options.msg_ct).html("\x3cspan class\x3d'vam " + css + "'\x3e" + ec.autoEncodeAttr(msg) + "\x3c/span\x3e");
		else {
			var id = (obj.attr("id") || obj.attr("name")) + "-msg";
			$("#" + id).remove();
			obj.after("\x3cspan id\x3d'" + id + "' class\x3d'vam " + css + "'\x3e" + ec.autoEncodeAttr(msg) + "\x3c/span\x3e")
		}
		if(options.autoFocus) obj.focus()
	},
	successFunction: function(obj, options) {
		if(options.msg_ct) $(options.msg_ct).html("");
		else $("#" + (obj.attr("id") || obj.attr("name")) + "-msg").remove()
	}
});
ec.form.validator.register("mobile", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	if(str.length < 11) return false;
	return /^1\d{10}$/.test(str)
});
ec.form.validator.register("phone", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	if(str.length < 7) return false;
	return /^((0[0-9]{2,3}\-)?[2-9][0-9]{6,7}|((00852|\+852)\-)?([2-3][0-9]{7}))+(\-[0-9]{1,4})?$/.test(str)
});
ec.form.validator.register("mobleOrPhone", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	if(str.length < 11) return false;
	return /(^((0[0-9]{2,3}\-)?[2-9][0-9]{6,7}|((00852|\+852)\-)?([2-3][0-9]{7}))+(\-[0-9]{1,4})?$)|(^(\+|00)?((86)?(1[3456789])[0-9]{9}|852[965][0-9]{7})$)/.test(str)
});
ec.form.validator.register("addressCheck", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	if(str == "\u9009\u62e9\u7701-\u5e02-\u533a-\u8857\u9053") return false;
	return true
});

function limitNum(event, ele) {
	var reg = /^(86008686|86860086|00868686|86868686|868686|860086|008686|0086|8686|86)/;
	$(ele).val(function() {
		return $(ele).val().replace(/\D/g, "").replace(reg, "")
	});
	if(/^1\d{10}$/.test($(ele).val())) {
		$(ele).removeClass("error");
		$("#tel-msg").removeClass("label-error").text("");
		$("#vatInvoice-mobile-error").removeClass("report-errors").text("")
	}
}

function checkIEVersion() {
	var browserName = navigator.userAgent;
	if(parseInt(/msie/i.test(browserName) && browserName.match(/msie\s[\d.]+/i)[0].split(" ")[1], 10) <= 8) {
		var html = '\x3cdiv class\x3d"ie8"\x3e\r\n\t\t\t            \x3cdiv class\x3d"h"\x3e\r\n\t\t\t                \u60a8\u4f7f\u7528\u7684\u6d4f\u89c8\u5668\u7248\u672c\u8fc7\u4f4e\uff0c\u53ef\u80fd\u6709\u5b89\u5168\u98ce\u9669\x3cbr\x3e\u63a8\u8350\u626b\u7801\u4f7f\u7528\u3010' + mallName + "APP\u3011\u6216\u8005\u5173\u6ce8\u5fae\u4fe1\u516c\u4f17\u53f7\u3010" + mallName + '\u3011\r\n\t\t\t            \x3c/div\x3e\r\n\t\t\t            \x3cdiv class\x3d"code clearfix"\x3e\r\n\t\t\t                \x3cp class\x3d"code1"\x3e\r\n\t\t\t                    \x3cem\x3e\x3cimg src\x3d"' + webDownloadAppImg + '" /\x3e\x3c/em\x3e\r\n\t\t\t                    \x3cspan\x3e' + mallName + 'APP\x3c/span\x3e\r\n\t\t\t                \x3c/p\x3e\r\n\t\t\t                \x3cp class\x3d"code2"\x3e\r\n\t\t\t                    \x3cem\x3e\x3cimg src\x3d"' + mallWechatSearchImg + '" /\x3e\x3c/em\x3e\r\n\t\t\t                    \x3cspan\x3e\u5fae\u4fe1\u516c\u4f17\u53f7\x3c/span\x3e\r\n\t\t\t                \x3c/p\x3e\r\n\t\t\t            \x3c/div\x3e\r\n\t\t\t            \x3cdiv class\x3d"word"\x3e\u6216\u8005\u5347\u7ea7\u60a8\u7684\u6d4f\u89c8\u5668\uff0c\u7ee7\u7eed\u8bbf\u95ee\x3c/div\x3e\r\n\t\t\t            \x3cdiv class\x3d"browser clearfix"\x3e\r\n\t\t\t                \x3ca href\x3d"https://www.google.cn/intl/zh-CN/chrome/browser/desktop/" target\x3d"_blank" class\x3d"logo-browser-chrome clearfix"\x3e\r\n\t\t\t                    \x3cem\x3e\x3c/em\x3e\r\n\t\t\t                    \x3cspan\x3echrome\x3c/span\x3e\r\n\t\t\t                \x3c/a\x3e\r\n\t\t\t                \x3ca href\x3d"https://www.microsoft.com/zh-cn/download/internet-explorer.aspx" target\x3d"_blank" class\x3d"logo-browser-ie clearfix"\x3e\r\n\t\t\t                    \x3cem\x3e\x3c/em\x3e\r\n\t\t\t                    \x3cspan\x3eIE\u6d4f\u89c8\u5668\x3c/span\x3e\r\n\t\t\t                \x3c/a\x3e\r\n\t\t\t            \x3c/div\x3e\r\n\t\t\t        \x3c/div\x3e';
		(new ec.box(html, {
			boxid: "update-box",
			width: 960,
			height: 711,
			showButton: false,
			zIndex: 700
		})).open();
		$("body").css("overflow", "hidden")
	}
}
ec.form.validator.register("addressConfirmCheck", function() {
	if($("#current-address").html() == "\u9009\u62e9\u7701-\u5e02-\u533a-\u8857\u9053") return false;
	else {
		var form = $("#myAddress-form");
		ec.addr.syncCache(form);
		var province = form.find("input[name\x3d'province']").val(),
			city = form.find("input[name\x3d'city']").val(),
			district = form.find("input[name\x3d'district']").val(),
			street = form.find("input[name\x3d'street']").val(),
			needL4Addr = form.find("input[name\x3d'needL4Addr']").val();
		if("" != province && "" != city && "" != district)
			if(needL4Addr == "true" && street == "") return false;
			else return true;
		else return false
	}
	return true
});
ec.form.validator.register("addressContractCheck", function() {
	var form = $("#order-address-add-form");
	var province = form.find("select[name\x3d'province'] option:selected").val(),
		city = form.find("select[name\x3d'city'] option:selected").val(),
		district = form.find("select[name\x3d'district'] option:selected").val(),
		street = form.find("select[name\x3d'street'] option:selected").val();
	if("" != province && "" != city && "" != district)
		if("" == street) return false;
		else return true;
	else return false
});
ec.form.validator.register("forbidChar", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	str = str.replace("*", "@"), str = str.replace("--", "@"), str = str.replace("/", "@"), str = str.replace("+", "@"), str = str.replace("'", "@"), str = str.replace("\\", "@"), str = str.replace("$", "@"), str = str.replace("^", "@"), str = str.replace(".", "@"), str = str.replace(";", "@"), str = str.replace("\x3c", "@"), str = str.replace("\x3e", "@"), str = str.replace('"', "@"), str = str.replace("\x3d", "@"), str = str.replace("{", "@"), str = str.replace("}", "@");
	str = str.replace("%", "@");
	str = str.replace("~", "@");
	str = str.replace("\x26", "@");
	if(str.search(new RegExp("@")) != -1) return false;
	return true
});
ec.form.validator.register("invoiceForbidChar", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	var invoiceRegex = /^[A-Za-z0-9\u3002\.\uff1f\?\uff01!\uff0c,\u3001\uff1b;\uff1a:\u201c\u201d\u2018\u2019"'\uff07\uff02\uff08 \uff09\u3014\u3015\[\]\{\}\(\)\uff3b\uff3d\u3010\u3011\u2014\u2500\uff5b\uff5d\uff3f\uff0e\u300a\u300b\u3008\u3009\uff1c\uff1e\u00b7\u2014_\*\uff0a\u25a1\uff3c\u25b2\u25cf\uff5e~\u2026\u2192@\uff20#\uff03\uffe5%\uff05\u2014\-\uff0d\uff0f=\uff1d\s\u4e00-\u9fa5]+$/;
	var result = invoiceRegex.test(str);
	if(!result) return false;
	return result
});
ec.form.validator.register("forbidChar2", function(str, options) {
	if(options.allowEmpty && ec.util.isEmpty(str)) return true;
	var invoiceRegex = /^[A-Za-z0-9\u3002\.\uff1f\?\uff01!\uff0c,\u3001\uff1b;\uff1a:\u201c\u201d\u2018\u2019"'\uff07\uff02\uff08 \uff09\u3014\u3015\[\]\{\}\(\)\uff3b\uff3d\u3010\u3011\u2014\u2500\uff5b\uff5d\uff3f\uff0e\u300a\u300b\u3008\u3009\uff1c\uff1e\u00b7\u2014_\*\uff0a\u25a1\uff3c\u25b2\u25cf\uff5e~\u2026\u2192@\uff20#\uff03\uffe5%\uff05\u2014\-\uff0d\uff0f=\uff1d\s\u4e00-\u9fa5]+$/;
	var result = invoiceRegex.test(str);
	if(!result) return false;
	return result
});
ec.ui.number = function(selector, options) {
	var defaultOpt = {
			max: null,
			min: null,
			showButton: true,
			minusBtn: '\x3ca class\x3d"icon-minus vam" href\x3d"javascript:;"\x3e\x3cspan\x3e-\x3c/span\x3e\x3c/a\x3e',
			plusBtn: '\x3ca class\x3d"icon-plus vam" href\x3d"javascript:;"\x3e\x3cspan\x3e+\x3c/span\x3e\x3c/a\x3e'
		},
		thix = $(selector),
		options = $.extend(defaultOpt, options),
		checkNumber = function(e) {
			var currentKey = e.which,
				val = parseInt(this.value, 10),
				thisVal = val < 1 ? 1 : val;
			if((currentKey < 37 || currentKey > 40) && currentKey != 8 && currentKey != 46)
				if(thisVal > options.max || thisVal < options.min) {
					e.preventDefault();
					return false
				} else if((currentKey < 48 || currentKey > 57) && (currentKey < 96 || currentKey > 105) && currentKey != 9) {
				e.preventDefault();
				return false
			}
		};
	thix.each(function() {
		var opt = $.extend({}, options),
			inputObj = $(this).css("ime-mode", "disabled");
		var tmp = inputObj.attr("max");
		if(tmp) options.max = opt.max = parseInt(tmp, 10) || opt.max;
		tmp = inputObj.attr("min");
		if(tmp) options.min = opt.min = parseInt(tmp, 10) || opt.min;
		if(opt.showButton) {
			var minusBtn = $(opt.minusBtn).click(function() {
					var val = inputObj.val() || 0,
						thisVal = parseInt(val, 10) - 1;
					if(typeof opt.min == "number" && thisVal < opt.min) return;
					inputObj.valS(thisVal).trigger("blur")
				}),
				plusBtn = $(opt.plusBtn).click(function() {
					var val = inputObj.val() || 0,
						thisVal = parseInt(val, 10) + 1;
					if(typeof opt.max == "number" && thisVal > opt.max) return;
					inputObj.valS(thisVal).trigger("blur")
				});
			inputObj.after(plusBtn).before(minusBtn)
		}
		inputObj.data("ovalue", inputObj.val() || 0).keydown(checkNumber).keyup(function() {
			var thisVal = parseInt(this.value || 0);
			if(typeof opt.min == "number" && thisVal < opt.min) {
				this.value = opt.min;
				return
			} else if(typeof opt.max == "number" && thisVal > opt.max) {
				this.value = opt.max;
				return
			}
		}).blur(function() {
			if(typeof opt.onchange === "function") {
				var oldVal = inputObj.data("ovalue"),
					newVal = this.value || 0,
					diff = parseInt(newVal, 10) - parseInt(oldVal, 10);
				if(diff == 0) return;
				inputObj.data("ovalue", newVal);
				opt.onchange.call(this, newVal, diff)
			}
		})
	})
};
ec.ui.countdown = function(selector, options) {
	var obj = $(selector),
		timer = obj.data("countdown"),
		timeIndex = 0,
		preTarget, diff, diffMs = options.now.getTime() - (new Date).getTime(),
		diffSecs = 0,
		getNext = function() {
			if(timeIndex >= options.times.length) return false;
			preTarget = options.times[timeIndex];
			timeIndex++;
			return true
		},
		getDiffSec = function() {
			diffSecs = Math.round((ec.util.parseDate(preTarget).getTime() - (new Date).getTime() - diffMs) / 1E3);
			diffSecs = diffSecs <= 0 ? 0 : diffSecs;
			return diffSecs
		},
		render = function() {
			diffSecs--;
			if(diffSecs <= 0) diffSecs = 0;
			diff = {
				day: Math.floor(diffSecs / (24 * 60 * 60)),
				hour: options.html.indexOf("{#day}") >= 0 ? Math.floor(diffSecs / 60 / 60) % 24 : Math.floor(diffSecs / 60 / 60),
				minute: Math.floor(diffSecs / 60) % 60,
				second: diffSecs % 60
			};
			var html = options.html.replace(/{#day}/g, diff.day).replace(/{#hours}/g, diff.hour > 9 ? diff.hour : "0" + diff.hour).replace(/{#minutes}/g, diff.minute > 9 ? diff.minute : "0" + diff.minute).replace(/{#seconds}/g, diff.second > 9 ? diff.second : "0" + diff.second);
			obj.html(html);
			return diffSecs <= 0 ? false : true
		};
	if(!options.times) options.times = [options.endTime];
	clearInterval(timer);
	while(getNext()) {
		if(getDiffSec() <= 0) continue;
		break
	}
	if(!render()) return;
	timer = setInterval(function() {
		if(!render()) {
			if(options.callback) options.callback(options);
			if(!getNext()) clearInterval(timer);
			else getDiffSec()
		}
	}, 1E3);
	obj.data("countdown", timer)
};
(function() {
	var _window = $(window),
		_binded = false,
		_doc = document.compatMode == "CSS1Compat" ? document.documentElement : document.body,
		_scrollTopSrart = 0,
		_scrollTopEnd = 0,
		_clientHeight, _imgList = [],
		_timer, _renderImg = function(img) {
			var top = img.offset().top - 300,
				pos = top + img.height() + 600;
			if(top >= _scrollTopSrart && top <= _scrollTopEnd || pos >= _scrollTopSrart && pos <= _scrollTopEnd) {
				img.attr("src", img.attr("data-lazy-src"));
				img.removeAttr("data-lazy-src");
				return true
			}
			return false
		};
	_bindEvent = function() {
		var scrollEvent = function() {
				clearTimeout(_timer);
				_timer = setTimeout(function() {
					_scrollTopSrart = _window.scrollTop();
					_scrollTopEnd = _scrollTopSrart + _clientHeight;
					var img;
					for(var i = 0; i < _imgList.length; i++) {
						img = _imgList[i];
						if(_renderImg(img)) {
							_imgList.splice(i, 1);
							i--
						}
					}
					if(!_imgList || _imgList.length == 0) {
						_window.unbind("scroll", scrollEvent);
						_window.unbind("resize", resizeEvent)
					}
				}, 100)
			},
			resizeEvent = function(event) {
				_clientHeight = _doc.clientHeight
			};
		_window.bind("scroll", scrollEvent);
		_window.bind("resize", resizeEvent);
		_clientHeight = _doc.clientHeight;
		_scrollTopSrart = _window.scrollTop();
		_scrollTopEnd = _scrollTopSrart + _clientHeight
	};
	ec.ui.lazyLoad = function(selector) {
		if(!_binded) {
			_bindEvent();
			_binded = true
		}
		$(selector).each(function() {
			if(this.tagName != "IMG") return;
			var thix = $(this);
			if(thix.attr("data-lazy-src"))
				if(!_renderImg(thix)) {
					thix.attr("src", ol.libPath + "../../images/echannel/loading/mask.png");
					_imgList.push(thix)
				}
		})
	}
})();
ec.ready(function() {
	ec.ui.lazyLoad($("body").children(".home-channel-menu,.layout,.g,.home-channel-container,.channel-floor,.home-channel-floor").find("img"));
	ec.ui.hrefSetTime()
});
ec.showError = function(json) {
	if(!json) return false;
	if(json.code === "login") {
		alertS("\u767b\u5f55\u8d85\u65f6\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55");
		location.reload();
		return false
	}
	var msg = json.info || json.msg || "";
	if(msg) alertS(msg)
};
(function() {
	var _init = function() {
		var _vb = ec.form.validator.bind,
			content = $("#surveryContent"),
			contact = $("#surveryContact"),
			code = $("#surveryVerify");
		_vb(content, {
			type: ["require", "length", "forbidChar"],
			validOnChange: true,
			msg_ct: "#errMsg",
			max: 200,
			min: 5,
			msg: {
				"require": "\u60a8\u8fd8\u6ca1\u6709\u8f93\u5165\u53cd\u9988\u4fe1\u606f\u54e6",
				"length": "\u53cd\u9988\u4fe1\u606f\u5185\u5bb9\u8bf7\u63a7\u5236\u57285~200\u4e2a\u5b57\u7b26\u4e4b\u95f4",
				"forbidChar": "\u53cd\u9988\u4fe1\u606f\u91cc\u5305\u542b\u975e\u6cd5\u5b57\u7b26"
			}
		});
		_vb(contact, {
			type: ["require", "length"],
			validOnChange: true,
			msg_ct: "#errMsg",
			min: 2,
			max: 100,
			msg: {
				"require": "\u8bf7\u8f93\u5165\u60a8\u7684\u8054\u7cfb\u65b9\u5f0f",
				"length": "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u8054\u7cfb\u65b9\u5f0f"
			}
		});
		_vb(code, {
			type: ["require"],
			validOnChange: true,
			msg_ct: "#errMsg",
			msg: {
				"require": "\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801"
			}
		});
		if(ec.account.isLogin()) contact.valS(ec.account.email || ec.account.mobile || ec.account.loginName);
		ec.form.input.label(contact, "\u9009\u586b\u90ae\u7bb1\u6216\u8005\u5546\u57ce\u8d26\u6237");
		ec.form.input.label(content, "\u8c22\u8c22\u60a8\u7684\u5b9d\u8d35\u5efa\u8bae\uff0c\u6211\u4eec\u5c06\u4e0d\u65ad\u6539\u8fdb")
	};
	ec.survery = {
		open: function() {
			if(_init) {
				_init();
				_init = null
			}
			var obj = $("#survery-box");
			var innerWidth = $(window).width();
			var innerHeight = $(window).height();
			var width = obj.width();
			var height = obj.height();
			var mask = document.createElement("div");
			mask.className = "mask-new";
			mask.style.width = innerWidth + "px";
			mask.style.height = innerHeight + "px";
			mask.style.background = "#000";
			mask.style.position = "fixed";
			mask.style.top = 0;
			mask.style.left = 0;
			mask.style.zIndex = 501;
			mask.style.opacity = .4;
			mask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity\x3d50)";
			document.body.appendChild(mask);
			ec.survery.reloadCode();
			$("#survery-box").css({
				position: "fixed",
				left: innerWidth / 2 - width / 2 + "px",
				top: innerHeight / 2 - height / 2 + "px",
				"z-index": 999
			}).show();
			$(window).resize(function() {
				innerWidth = $(window).width();
				innerHeight = $(window).height();
				$("#survery-box").css({
					left: innerWidth / 2 - width / 2 + "px",
					top: innerHeight / 2 - height / 2 + "px"
				})
			})
		},
		close: function() {
			ol.ui.masker.unmask();
			$(".mask-new").remove();
			$("#survery-box").hide()
		},
		submit: function() {
			var form = $("#form-feedback");
			if(!ec.form.validator(form, true)) return false;
			ec.account.afterLogin(function() {
				$.ajax({
					type: "post",
					url: domainMain + "/feedback.json",
					dataType: "json",
					timeout: 1E4,
					async: true,
					data: {
						type: $("#surverytype").val(),
						content: $("#surveryContent").val(),
						contact: $("#surveryContact").val(),
						code: $("#surveryVerify").val()
					},
					success: function(json) {
						if(!json.success) {
							ec.survery.reloadCode();
							$("#surveryVerify").val("");
							$("#errMsg").html('\x3cspan class\x3d"vam icon-warn"\x3e\u63d0\u4ea4\u5931\u8d25\uff0c' + json.msg + "\x3c/span\x3e");
							return
						}
						alert("\u63d0\u4ea4\u6210\u529f\uff0c" + mallName + "\u611f\u8c22\u60a8\u7684\u5b9d\u8d35\u5efa\u8bae\uff01");
						ec.survery.close();
						$("#surveryContent,#surveryVerify").val("");
						return
					}
				})
			});
			return false
		},
		reloadCode: function() {
			gid("surveryVerifyImg").src = domainMain + "/feedback/randomCode?_t\x3d" + (new Date).getTime()
		},
		validate: function() {
			$.ajax({
				type: "post",
				url: domainMain + "/feedback/validRandomCode?_t\x3d" + (new Date).getTime(),
				timeout: 1E4,
				dataType: "json",
				data: {
					code: $("#surveryVerify").val()
				},
				success: function(json) {
					if(json.success) return;
					gid("surveryVerifyImg").src = domainMain + "/feedback/randomCode?_t\x3d" + (new Date).getTime();
					$("#surveryVerify").val("");
					return
				}
			})
		}
	}
})();
$(function() {
	var win = $(window),
		timer, $btn = $("#hungBar-top"),
		setTime = function() {
			$btn.stop();
			if(win.scrollTop() > 1200) $btn.fadeTo(20, 1);
			else $btn.fadeOut(20);
			timer = null
		};
	win.scroll(function() {
		timer = setTimeout(setTime, 50)
	});
	setTime();
	$(".hungBar-top").bind("click", function() {
		$("html,body").animate({
			scrollTop: "0px"
		}, 400)
	})
});
(function() {
	ec.ui.hrefSetTime = function() {
		var time = (new Date).getTime();
		try {
			$("a[timeType\x3dtimestamp]").each(function() {
				var obj = $(this);
				obj.attr("href", obj.attr("href").replace(/timestamp/g, time))
			})
		} catch(err) {}
	}
})();
ec.pkg("ec.encipher");
ec.encipher.base = 10;
ec.encipher.bigPowMod = function(a, b, c) {
	a = str2bigInt(a, ec.encipher.base);
	b = str2bigInt(b, ec.encipher.base);
	c = str2bigInt(c, ec.encipher.base);
	var result = powMod(a, b, c);
	result = bigInt2str(result, ec.encipher.base);
	return result
};
ec.encipher.randomInt = function(bits) {
	var result = randBigInt(bits, 0);
	return bigInt2str(result, ec.encipher.base)
};
ec.pkg("ec.addr");
ec.addr.list = function(callback) {
	$.ajax({
		url: openApiDomain + "/mcp/address/getAddressList",
		dataType: "json",
		async: false,
		timeout: 1E4,
		data: {
			lang: "zh-CN",
			country: mallCountry,
			portal: 1,
			t: (new Date).getTime()
		},
		success: function(json) {
			if(!json.success) return;
			json.addressInfoList = json.addressInfoList || [];
			if(json.addressInfoList.length == 0) $("#base-table").find(".report-errors").show();
			else $("#base-table").find(".report-errors").hide();
			callback(json.addressInfoList, json.randomFlag)
		}
	})
};
ec.addr.syncCache = function(formObj) {
	formObj.find("input[name\x3dprovince]").attr("value", formObj.find("input[name\x3dprovinceG]").attr("value"));
	formObj.find("input[name\x3dcity]").attr("value", formObj.find("input[name\x3dcityG]").attr("value"));
	formObj.find("input[name\x3ddistrict]").attr("value", formObj.find("input[name\x3ddistrictG]").attr("value"));
	formObj.find("input[name\x3dstreet]").attr("value", formObj.find("input[name\x3dstreetG]").attr("value"));
	formObj.find("input[name\x3dneedL4Addr]").attr("value", formObj.find("input[name\x3dneedL4AddrG]").attr("value"))
};
ec.addr.save = function(form, options) {
	var formObj = $(form);
	var id = formObj.find("input[name\x3did]").val();
	var url = openApiDomain + "/mcp/address/createAddress";
	var _method = "post";
	ec.addr.syncCache(formObj);
	var province = formObj.find("input[name\x3dprovince]").val();
	var city = formObj.find("input[name\x3dcity]").val();
	var district = formObj.find("input[name\x3ddistrict]").val();
	var street = formObj.find("input[name\x3dstreet]").val();
	var needL4Addr = formObj.find("input[name\x3d'needL4Addr']").val();
	var mobileObj = formObj.find("input[name\x3dmobile]");
	var phoneObj = formObj.find("input[name\x3dphone]");
	if(mobileObj.hasClass("error") || phoneObj.hasClass("error")) return false;
	if(!ec.form.validator(formObj, false)) return false;
	var mobile = $.trim(formObj.find("input[name\x3dmobile]").val());
	var phone = $.trim(formObj.find("input[name\x3dphone]").val());
	if(ec.util.isEmpty(mobile)) return false;
	if(options.afterCheck) options.afterCheck(id);
	var data = {};
	if(options.type != "add") {
		url = openApiDomain + "/mcp/address/updateAddress";
		data.id = id
	}
	var consignee = formObj.find("input[name\x3dconsignee]").val();
	var address = formObj.find("input[name\x3daddress],textarea[name\x3daddress]").val();
	var zipCode = formObj.find("input[name\x3dzipCode]").val();
	var randomFlag = formObj.find("input[name\x3drandomFlag]").val();
	data.consignee = consignee;
	data.province = province;
	data.city = city;
	data.district = district;
	data.street = street;
	data.address = address;
	data.zipCode = zipCode;
	data.mobile = mobile;
	data.phone = phone;
	data.randomFlag = randomFlag;
	var $defaultFlag = formObj.find("input[name\x3ddefaultFlag]");
	if($defaultFlag.length == 1 && $defaultFlag[0].checked && !$defaultFlag[0].disabled) data.defaultFlag = $defaultFlag.val();
	data.t = (new Date).getTime();
	$.ajax({
		url: url,
		method: "post",
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1,
			addressInfo: data
		}),
		async: false,
		dataType: "json",
		timeout: 2E4,
		success: function(json) {
			if(!json.success) {
				ec.showError(json);
				return
			}
			if(options.successFunction) options.successFunction(json.addressInfo, form)
		},
		error: function() {
			alert("\u4fdd\u5b58\u8d85\u65f6\uff0c\u8bf7\u91cd\u8bd5\uff01")
		}
	});
	return false
};
ec.addr.setDefault = function(id, options) {
	var B = ec.util.cookie.get("sc_b");
	$.ajax({
		url: openApiDomain + "/mcp/address/setDefaultAddress",
		method: "post",
		async: false,
		dataType: "json",
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1,
			addressId: id,
			defaultFlag: 1,
			defaultBilling: 1
		}),
		success: function(json) {
			if(!json.success) {
				ec.showError(json);
				return
			}
			if(options.successFunction) options.successFunction(id)
		},
		error: function() {
			alert("\u64cd\u4f5c\u8d85\u65f6\uff0c\u8bf7\u91cd\u8bd5\uff01")
		}
	})
};
ec.addr.del = function(id, options) {
	$.ajax({
		url: openApiDomain + "/mcp/address/deleteAddress",
		method: "post",
		async: false,
		dataType: "json",
		timeout: 1E4,
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1,
			addressId: id
		}),
		success: function(json) {
			if(!json.success) {
				ec.showError(json);
				if(json.code == "default")
					if(options.deleteDefault) options.deleteDefault(id);
				return
			}
			if(options.successFunction) options.successFunction(id)
		},
		error: function() {
			alert("\u8bfb\u53d6\u8d85\u65f6\uff0c\u8bf7\u91cd\u8bd5\uff01")
		}
	})
};
ec.pkg("ec.prescription");
ec.prescription.getEstimateGetOrderTime = function(callback, distinctId, price, invoiceonfig, skuCodeList) {
	ec.ui.loading.show({
		modal: false
	});
	$.ajax({
		url: "/order/estimateArrivalTime.json?d\x3d" + distinctId + "\x26p\x3d" + price + "\x26i\x3d" + 0 + "\x26l\x3d" + skuAddress.code + "\x26k\x3d" + ($("#pro-quantity").val() ? $("#pro-quantity").val() : 1),
		dataType: "json",
		timeout: 2E4,
		success: function(json) {
			ec.ui.loading.hide();
			callback(json, false)
		},
		error: function() {
			ec.ui.loading.hide();
			callback(null, true)
		}
	})
};
ec.prescription.getEstimateGetOrderTime2 = function(callback, distinctId, price, invoiceonfig, skuCodeList, countTemp) {
	$.ajax({
		url: "/order/estimateArrivalTime.json?d\x3d" + distinctId + "\x26p\x3d" + price + "\x26i\x3d" + invoiceonfig + "\x26l\x3d" + skuCodeList + "\x26k\x3d" + countTemp,
		dataType: "json",
		timeout: 2E4,
		success: function(json) {
			callback(json, false)
		},
		error: function() {
			callback(null, true)
		}
	})
};
ec.prescription.queryPreDeliveryAndArrival = function(callback, districtId, price, invoiceType, sbomCode) {
	$.ajax({
		url: "/order/queryPreDeliveryAndArrival.json",
		type: "POST",
		data: {
			"districtId": districtId ? districtId : "",
			"price": price ? price : "",
			"invoiceType": invoiceType ? invoiceType : "",
			"sbomCode": sbomCode ? sbomCode : ""
		},
		dataType: "json",
		timeout: 2E4,
		success: function(json) {
			callback(json, false);
			if("function" === typeof ec.product.refreshStyle) ec.product.refreshStyle()
		},
		error: function() {
			callback(null, true)
		}
	})
};
ec.prescription.queryPreDeliveryAndArrivalForProductDetail = function(callback, districtId, price, invoiceType, sbomCode) {
	$.ajax({
		type: "POST",
		url: openApiDomain + "/mcp/order/getShippingTime",
		data: JSON.stringify({
			"portal": "1",
			"lang": "zh-CN",
			"country": mallCountry,
			"sbomCode": sbomCode,
			"distinctId": districtId,
			"price": price ? price : ""
		}),
		dataType: "json",
		timeout: 1E4,
		success: function(json) {
			callback(json, false);
			if("function" === typeof ec.product.refreshStyle) ec.product.refreshStyle()
		},
		error: function() {
			callback(null, true)
		}
	})
};
ec.myPoint = 0;
getPointBalance = function() {
	$.ajax({
		url: openApiDomain + "/mcp/queryUserPointBalanceDetail",
		data: JSON.stringify({
			"portal": "1",
			"lang": "zh-CN",
			"country": mallCountry
		}),
		type: "POST",
		timeout: 1E4,
		dataType: "json",
		success: function(json) {
			if(json.code != "0") {
				$("#newPointlogin_status").hide();
				return
			}
			var pointBlance = ec.myPoint = json.pointBlance;
			$("#userPointBalance").textS(pointBlance);
			if(parseInt(pointBlance) > parseInt(999)) $("#balanceicon_privilege").empty().html('\x3ca href\x3d"/member/newpoint?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + 999 + "+\x3c/a\x3e");
			else $("#balanceicon_privilege").empty().html('\x3ca href\x3d"/member/newpoint?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + pointBlance + "\x3c/a\x3e");
			$("#balanceicon_myCenter").empty().html('\x3ca href\x3d"/member/newpoint?t\x3d' + (new Date).getTime() + '" target\x3d"_blank"\x3e' + pointBlance + "\x3c/a\x3e");
			$("#balanceicon_myCenter").removeClass("p-price-no")
		}
	})
};
ec.getLength = function(str) {
	if(str == null) return 0;
	if(typeof str != "string") str += "";
	return str.replace(/[^\x00-\xff]/g, "01").length
};
ec.isChina = function(s) {
	var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi;
	if(!patrn.exec(s)) return false;
	else return true
};
ec.cutstr = function(str, len) {
	var str_length = 0;
	var str_len = 0;
	str_cut = new String;
	str_len = str.length;
	if(!ec.isChina(str)) len = len + 6;
	for(var i = 0; i < str_len; i++) {
		a = str.charAt(i);
		str_length++;
		if(escape(a).length > 4) str_length++;
		str_cut = str_cut.concat(a);
		if(str_length >= len) {
			str_cut = str_cut.concat("...");
			return str_cut
		}
	}
	if(str_length < len) return str
};
ec.checkBrowerIE = function() {
	var ua = window.navigator.userAgent;
	if(!!window.ActiveXObject || "ActiveXObject" in window || ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) return true;
	else return false
};
ec.searchHistoryUnique = function(sourceHis) {
	var new_arr = [];
	for(var i = 0; i < sourceHis.length; i++) {
		var items = sourceHis[i];
		if($.inArray(items, new_arr) == -1) new_arr.push(items)
	}
	return new_arr
};
ec.pkg("ec.search");
var searchHistoryMaxLength = 48;
var hisWordListLen = 0;
ec.search.querySearchHistory = function(flag) {
	$.ajax({
		url: "/searchHistory.json?t\x3d" + (new Date).getTime(),
		dataType: "json",
		timeout: 1E4,
		success: function(json) {
			var f = flag;
			var hisList = [];
			if(json.success != undefined && !json.success) {
				hisWordListLen = 0;
				ec.search.hotWord(f, hisList, hisWordListLen);
				return
			}
			hisList = json.searchHistoryList;
			if(hisList != undefined && hisList.length) hisWordListLen = hisList.length;
			var html = [];
			if(hisWordListLen > 6) hisWordListLen = 6;
			for(var j = 0; j < hisWordListLen; j++) {
				var hisKeyword = hisList[j];
				var hisKeywordLen = ec.getLength(hisKeyword);
				hisKeyword = hisKeyword.transHtmlAttribute();
				var encoceText = encodeURIComponent(ec.filteredTxt(hisKeyword));
				var searchWordUrl = ec.base.findSearchHotWordUrl(hisKeyword);
				if(searchWordUrl) html.push('\x3cli\x3e\x3ca href\x3d"' + searchWordUrl + '" target\x3d"_blank" onclick\x3d"pushMsgSearchHistory(this)" data-value\x3d"' + encoceText + '"\x3e');
				else html.push('\x3cli\x3e\x3ca href\x3d"javascript:;" onclick\x3d"pushMsgSearchHistoryKey(this)" data-value\x3d"' + encoceText + '"\x3e');
				if(hisKeywordLen > searchHistoryMaxLength) html.push($("\x3cdiv/\x3e").textS(ec.cutstr(hisKeyword, searchHistoryMaxLength)).html());
				else html.push($("\x3cdiv/\x3e").textS(hisKeyword).html());
				html.push("\x3c/a\x3e\x3c/li\x3e")
			}
			$("#search-history-list").html(html.join(""));
			$("#search-history").show();
			if($("#search-history").is(":visible") || $(".autocomplete").is(":visible")) $("#search-bar-form").addClass("hover");
			else $("#search-bar-form").removeClass("hover");
			ec.search.hotWord(f, hisList, hisWordListLen)
		},
		error: function() {}
	})
};

function pushMsgSearchHistoryKey(obj) {
	pushMsgSearchHistory(obj, 1);
	ec.postTo("/search", {
		keyword: ec.filteredTxt(decodeURIComponent($(obj).attr("data-value") || ""))
	}, "_blank")
}

function pushMsgSearchHistory(obj, urlType) {
	urlType = urlType || 2;
	ec.dapClick(300090101, {
		"searchWord": decodeURIComponent($(obj).attr("data-value") || ""),
		"type": "3",
		"urlType": urlType,
		"click": "1"
	})
}
ec.search.deleteSearchHistory = function() {
	$.ajax({
		type: "post",
		url: "/search/clearUp.json?t\x3d" + (new Date).getTime(),
		dataType: "json",
		timeout: 1E4,
		success: function(json) {
			if(json.success != undefined && !json.success) return
		}
	})
};
ec.search.hotWord = function(flag, hisList, hisWordListLen) {
	var f = flag;
	var hisLst = hisList;
	var hisWLL = hisWordListLen;
	var hotWordListAll = ec.search.searchArr;
	var hotWordListSC = [];
	var hotWordListHW = [];
	var hotWordListRY = [];
	var hotWordList = [];
	for(var swal = 0; swal < hotWordListAll.length; swal++)
		if(hotWordListAll[swal].inSearchBox == 1)
			if(hotWordListAll[swal].type == 1) hotWordListSC.push(hotWordListAll[swal]);
			else if(hotWordListAll[swal].type == 2) hotWordListHW.push(hotWordListAll[swal]);
	else hotWordListRY.push(hotWordListAll[swal]);
	if(f == "searchWordSCList") hotWordList = hotWordListSC;
	else if(f == "searchWordHWList") hotWordList = hotWordListHW;
	else hotWordList = hotWordListRY;
	var html = [];
	var tag = false;
	var tip = 1;
	var recordLen = 10 - hisWordListLen;
	if(hotWordList.length <= 2) return;
	for(var i = 2; i < hotWordList.length; i++) {
		var hotWord = hotWordList[i];
		var hotWordLen = ec.getLength(hotWord.word);
		word = hotWord.word.transHtmlAttribute();
		tag = false;
		if(hisWordListLen != 0)
			for(var k = 0; k < hisWordListLen; k++) {
				var hisWord = hisLst[k];
				if(word == hisWord.transHtmlAttribute()) {
					tag = true;
					break
				}
			}
		if(tip > recordLen) break;
		if(tag == false) {
			if(hotWord.isActivityWords == 1)
				if(hotWord.activityUrl != null && hotWord.activityUrl != "") {
					html.push('\x3cli\x3e\x3ca href\x3d"' + hotWord.activityUrl + '" target\x3d"_blank" onclick\x3d"pushHotSearchMsg(\'' + ec.encodeForJS(word) + '\')" data-value\x3d"' + encodeURIComponent(word) + '"\x3e');
					tip = tip + 1
				} else {
					html.push('\x3cli\x3e\x3ca href\x3d"javascript:void(0);" target\x3d"_blank" onclick\x3d"searchFunc(\'' + ec.encodeForJS(word) + '\'); return false;" data-value\x3d"' + encodeURIComponent(word) + '"\x3e');
					tip = tip + 1
				}
			else {
				html.push('\x3cli\x3e\x3ca href\x3d"javascript:void(0);" target\x3d"_blank" onclick\x3d"searchFunc(\'' + ec.encodeForJS(word) + '\'); return false;" data-value\x3d"' + encodeURIComponent(word) + '"\x3e');
				tip = tip + 1
			}
			if(hotWordLen > searchHistoryMaxLength) html.push($("\x3cdiv/\x3e").textS(ec.cutstr(word, searchHistoryMaxLength)).html());
			else html.push($("\x3cdiv/\x3e").textS(word).html());
			html.push("\x3c/a\x3e\x3c/li\x3e")
		}
	}
	if(tip > 1) {
		$("#search-key-list").html(html.join(""));
		$("#search-key").show();
		if($("#search-key").is(":visible") || $(".autocomplete").is(":visible")) $("#search-bar-form").addClass("hover");
		else $("#search-bar-form").removeClass("hover")
	}
};
ec.account.privilege_updateProgress = function(max, min, totalPoint, gradeCode) {
	if(max >= 0 && min >= 0 && totalPoint >= 0) {
		var v_high = max,
			v_low = min,
			v_curr = totalPoint,
			per = (v_curr - v_low) / (v_high - v_low),
			_deg = 0;
		if(parseInt(v_curr) >= parseInt(v_high)) {
			$(".canvas-left div").css({
				"transform": "rotateZ(0deg)",
				"background": "#F05C20"
			});
			$(".canvas-right div").css({
				"transform": "rotateZ(-39deg)"
			})
		} else if(per > .5) {
			_deg = 280 * per - 320;
			$(".canvas-left div").css({
				"transform": "rotateZ(0deg)"
			});
			$(".canvas-right div").css({
				"transform": "rotateZ(" + _deg + "deg)"
			});
			if(per > .7) $(".canvas-left div").css({
				"background": "#F05C20"
			});
			else {
				_deg = _deg + 180;
				$(".canvas-left div").css({
					"transform": "rotateZ(" + _deg + "deg)",
					"background": "-webkit-gradient(linear, 0 bottom, right 0, from(#F05C20), to(#F58555))"
				});
				$(".canvas-right div").css({
					"background": "-webkit-gradient(linear, 0 bottom, right 0, from(#F58555), to(#F05C20))"
				})
			}
		} else {
			if(per < .01 && per > 0) per = .01;
			_deg = 265 * per - 125;
			$(".canvas-left div").css({
				"transform": "rotateZ(" + _deg + "deg)",
				"background": "-webkit-gradient(linear, 0 bottom, 0 0, from(#F05C20), to(#F58555))"
			});
			$(".canvas-right div").css({
				"transform": "rotateZ(-180deg)"
			})
		}
	}
	var i = $("#user-vip-level-tips");
	if(gradeCode != null) switch(gradeCode) {
		case 0:
			vipColor = "#999";
			i.attr("class", "icon-vip-level-0");
			break;
		case 1:
			vipColor = "#01abdf";
			i.attr("class", "icon-vip-level-1");
			break;
		case 2:
			vipColor = "#24ca43";
			i.attr("class", "icon-vip-level-2");
			break;
		case 3:
			vipColor = "#ffb710";
			i.attr("class", "icon-vip-level-3");
			break;
		case 4:
			vipColor = "#fc5d21";
			i.attr("class", "icon-vip-level-4");
			break;
		case 5:
			vipColor = "#fc3784";
			i.attr("class", "icon-vip-level-5");
			break;
		default:
			vipColor = "#999";
			i.attr("class", "icon-vip-level-0");
			break
	}
};
ec.account.privilege_updateProgressIndex = function(gradeCode) {
	var i = $("#user-vip-level-tips-index");
	if(gradeCode != null) switch(gradeCode) {
		case 0:
			vipColor = "#999";
			i.attr("class", "user-level icon-vip-level-0");
			break;
		case 1:
			vipColor = "#01abdf";
			i.attr("class", "user-level icon-vip-level-1");
			break;
		case 2:
			vipColor = "#24ca43";
			i.attr("class", "user-level icon-vip-level-2");
			break;
		case 3:
			vipColor = "#ffb710";
			i.attr("class", "user-level icon-vip-level-3");
			break;
		case 4:
			vipColor = "#fc5d21";
			i.attr("class", "user-level icon-vip-level-4");
			break;
		case 5:
			vipColor = "#fc3784";
			i.attr("class", "user-level icon-vip-level-5");
			break;
		default:
			vipColor = "#999";
			i.attr("class", "user-level icon-vip-level-0");
			break
	}
};

function getPtid() {
	var tid = ec.util.cookie.get("TID");
	if(tid && tid != null && tid != "") return tid;
	var deviceid = ec.util.cookie.get("deviceid");
	if(deviceid == null || deviceid == "" || deviceid == undefined) {
		var s = [];
		var h = "0123456789abcdef";
		for(var a = 0; a < 32; a++) s[a] = h.substr(Math.floor(Math.random() * 16), 1);
		s[14] = "4";
		s[19] = h.substr(s[19] & 3 | 8, 1);
		s[8] = s[13] = s[18] = s[23];
		deviceid = s.join("");
		ec.util.cookie.set("deviceid", deviceid, {
			"expires": 3650,
			"domain": mallDomain
		})
	}
	ec.util.cookie.set("TID", deviceid, {
		"expires": 3650,
		"domain": mallDomain
	});
	return deviceid
}

function getTime() {
	var date = new Date;
	var y = date.getFullYear();
	var m = date.getMonth() + 1;
	m = m < 10 ? "0" + m : m;
	var d = date.getDate();
	d = d < 10 ? "0" + d : d;
	var h = date.getHours();
	h = h < 10 ? "0" + h : h;
	var minute = date.getMinutes();
	var second = date.getSeconds();
	minute = minute < 10 ? "0" + minute : minute;
	second = second < 10 ? "0" + second : second;
	var millSec = date.getMilliseconds();
	if(millSec < 10) millSec = "00" + millSec;
	else if(millSec < 100) millSec = "0" + millSec;
	var time = "" + y + m + d + h + minute + second + millSec;
	return time
}

function safeStr(str) {
	if(str == null) return;
	return str.replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;").replace(/"/g, "\x26quot;").replace(/'/g, "\x26#039;")
}
ec.dapTrack = function(actionCode, content) {
	if("object" === typeof JSAnalysisSDK)
		if(actionCode) JSAnalysisSDK.track({
			actionCode: actionCode,
			content: content
		});
		else JSAnalysisSDK.report();
	else ec.load({
		url: dapDomain + "/dap/jssdk.js",
		type: "js",
		onload: function(actionCode, content) {
			if("object" !== typeof JSAnalysisSDK) return console.log("JSAnalysisSDK \u52a0\u8f7d\u5931\u8d25");
			JSAnalysisSDK.setReportUrl(dapDomain + "/dap/report");
			JSAnalysisSDK.set({
				cpsId: ec.util.cookie.get("cps_id") || "",
				direct: ec.util.cookie.get("cps_dap_redirect") || "",
				uid: ec.util.cookie.get("uid") || "",
				wi: ec.util.cookie.get("cps_wi") || "",
				tid: getPtid(),
				time: getTime(),
				dat: 8,
				ac: "CN",
				co: "CN",
				ln: "zh_CN",
				bn: navigator.userAgent
			});
			ec.dapTrack(actionCode, content)
		}
	})
};
ec.account.dapPushMsg = function(key, value, type) {
	_paq.push(["setTrackerUrl", "https://metrics-drcn.dt.hicloud.com:6447/webv1"]);
	var orderCode = (ec.order && ec.order.orderCode ? ec.order.orderCode : "") + "";
	_paq.push(["setSiteId", "www." + mallDomain]);
	if(type == "view") {
		getPtid();
		_paq.push(["setCustomVariable", 1, "cid", ec.util.cookie.get("cps_id") || "", "page"]);
		_paq.push(["setCustomVariable", 2, "direct", ec.util.cookie.get("cps_dap_redirect") || "", "page"]);
		_paq.push(["setCustomVariable", 4, "wi", ec.util.cookie.get("cps_wi") || "", "page"]);
		_paq.push(["setCustomVariable", 5, "AC", "CN", "page"]);
		_paq.push(["trackPageView"])
	} else if(type == "click") {
		_paq.push(["setCustomVariable", 1, "cid", ec.util.cookie.get("cps_id") || "", "page"]);
		_paq.push(["setCustomVariable", 2, "direct", ec.util.cookie.get("cps_dap_redirect") || "", "page"]);
		_paq.push(["setCustomVariable", 3, "orderid", orderCode, "page"]);
		_paq.push(["setCustomVariable", 4, "wi", ec.util.cookie.get("cps_wi") || "", "page"]);
		_paq.push(["trackLink", key, "link", value])
	}
	ec.util.cookie.set("cps_dap_redirect", null, {
		expires: -1,
		domain: mallDomain
	});
	ec.load({
		url: "https://res.vmallres.com/bi/hianalytics.js",
		type: "js",
		loadType: "lazy"
	})
};
$(function() {
	ec.account.dapPushMsg("", "", "view");
	ec.dapTrack();
	ec.agreement.init();
	var lastReferrer = location.href;
	if(document.referrer && (location.pathname.match(/^\/member\//) || location.pathname.match(/^\/order\//))) lastReferrer = document.referrer;
	lastReferrer = lastReferrer.substring(domainMain.length);
	if(lastReferrer.startsWith("/") && !lastReferrer.match(/^\/member\//) && !lastReferrer.match(/^\/order\//)) ec.util.cookie.set("lastReferrer", lastReferrer)
});
ec.openWindow = function(opt) {
	if("string" === typeof opt) opt = {
		url: opt
	};
	opt = $.extend({
		url: "",
		name: "",
		features: "",
		replace: false
	}, opt);
	return window.open(opt.url, opt.name, opt.features, opt.replace)
};
ec.redirectTo = function(opt) {
	if("string" === typeof opt) opt = {
		url: opt
	};
	opt = $.extend({
		url: "",
		win: window
	}, opt);
	return opt.win.location.href = opt.url.transHtmlAttribute()
};
ec.postTo = function(url, data, target) {
	var targetStr = "";
	if(target) targetStr = ' target\x3d"_blank"';
	var form = $('\x3cform action\x3d"' + url + '" method\x3d"post"' + targetStr + "\x3e\x3c/form\x3e");
	form.append('\x3cinput name\x3d"CsrfToken" type\x3d"hidden" value\x3d"' + csrfToken.get() + '"\x3e');
	for(var k in data)
		if(Array.isArray(data[k])) data[k].forEach(function(lv) {
			form.append('\x3cinput name\x3d"' + k + '[]" type\x3d"hidden" value\x3d"' + String(lv) + '"\x3e')
		});
		else form.append('\x3cinput name\x3d"' + k + '" type\x3d"hidden" value\x3d"' + String(data[k]) + '"\x3e');
	$("body").append(form);
	form.submit();
	form.remove()
};
ec.postThis = function() {
	var obj = $(window.event.target || window.event.srcElement);
	if(!obj.attr("data-url")) obj = obj.closest("*[data-url]");
	return ec.postTo(obj.attr("data-url"), parseJSON(decodeURIComponent(obj.attr("data-data"))), obj.attr("data-target"))
};
ec.dapClick = function(link, content) {
	var value = {
		TID: getPtid(),
		TIME: getTime(),
		DAT: 8,
		AC: "CN",
		CO: "CN",
		LN: "zh_CN",
		BN: navigator.userAgent,
		CONTENT: content
	};
	ec.account.dapPushMsg(link, value, "click");
	ec.dapTrack(link, content)
};
ec.agreement = ec.agreement || {};
ec.agreement.showMsgSetter = false;
ec.agreement.fetchNew = function() {
	$.ajax({
		url: openApiDomain + "/mcp/agreement/queryAgreementSignLogs",
		method: "post",
		dataType: "json",
		contentType: "text/plain",
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1,
			agrInfo: [{
				agrType: 134,
				country: "cn",
				branchId: 0
			}, {
				agrType: 10023,
				country: "cn",
				branchId: 0
			}],
			obtainVersion: false,
			tokenType: 2
		}),
		success: function(r) {
			if(!r || !r.success || !r.signInfo) {
				ec.agreement.next();
				return false
			}
			if(r.signAgreementSwitch !== "ON") {
				ec.util.cookie.set("hasSigned", "2", {
					domain: mallDomain,
					path: "/"
				});
				ec.agreement.next();
				return false
			}
			if(r.signInfo.length < 1) {
				ec.agreement.dapType = 0;
				var html = "";
				html += '\x3cdiv class\x3d"f14 pdt-20" style\x3d"color: #666"\x3e';
				html += "  \u6b22\u8fce\u60a8\u4f7f\u7528" + mallName + '\uff0c\u4e3a\u4e86\u7ed9\u60a8\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52a1\uff0c\u672c\u7f51\u7ad9\u5728\u4f7f\u7528\u65f6\u9700\u8981\u83b7\u53d6\u7f51\u7edc\u3001\u5e10\u53f7\u53ca\u76f8\u5173\u4f7f\u7528\u4fe1\u606f\u3002\u6211\u4eec\u5c06\u5bf9\u60a8\u7684\u4e2a\u4eba\u6570\u636e\u4e88\u4ee5\u5145\u5206\u4fdd\u62a4\u3002\u70b9\u51fb\x26nbsp;\x26nbsp;\u201c\u540c\u610f\u201d\x26nbsp;\uff0c\u8868\u793a\u60a8\u540c\u610f\u4e0a\u8ff0\u5185\u5bb9\u53ca\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/terms.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e' + mallName + '\u670d\u52a1\u534f\u8bae\x3c/a\x3e\u3001\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/privacy-statement.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e\u5173\u4e8e' + mallName + "\u4e0e\u9690\u79c1\u7684\u58f0\u660e\x3c/a\x3e\u3002";
				html += "\x3c/div\x3e";
				if(r.marketingMessageSwitch > 0) {
					ec.agreement.showMsgSetter = true;
					html += '\x3cdiv class\x3d"hr-16"\x3e\x3c/div\x3e';
					html += '\x3cdiv class\x3d"box-prompt-success-area" \x3e';
					html += '  \x3cdiv class\x3d"b clearfix" style\x3d"padding-bottom: 0"\x3e';
					if(r.marketingMessageSwitch < 2) html += '\x3cinput name\x3d"confirmMsgPush" type\x3d"checkbox" checked\x3d"checked"\x3e';
					else html += '\x3cinput name\x3d"confirmMsgPush" type\x3d"checkbox"\x3e';
					html += '    \x3cp style\x3d"color: #666;  width: 376px; margin-top: 4px;"\x3e\u63a5\u6536\u77ed\u4fe1\u3001\u90ae\u4ef6\u3001\u7cfb\u7edf\u901a\u77e5\u53d1\u9001\u7684\u6d3b\u52a8\u3001\u4f18\u60e0\u3001\u4e2d\u5956\u7b49\u6d88\u606f\u3002\x3ca href\x3d"' + salevmall + '/notification.html" target\x3d"_blank"\x3e\u4e86\u89e3\u8be6\u60c5\x3c/a\x3e\x3c/p\x3e';
					html += "  \x3c/div\x3e";
					html += "\x3c/div\x3e"
				}
				html += '\x3cdiv class\x3d"hr-25"\x3e\x3c/div\x3e';
				ec.agreement.box("" + mallName + "\u670d\u52a1", html, [134, 10023]);
				return false
			}
			var reSignUser = false,
				reSignPrivacy = false;
			r.signInfo.forEach(function(v) {
				if(v.agrType === 134 && v.needSign) reSignUser = true;
				if(v.agrType === 10023 && v.needSign) reSignPrivacy = true
			});
			if(reSignUser && reSignPrivacy) {
				ec.agreement.dapType = 3;
				var html = "";
				html += '\x3cdiv class\x3d"f14 pdt-20" style\x3d"color: #666"\x3e';
				html += '  \u4e3a\u4e86\u7ed9\u60a8\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52a1\uff0c\u6211\u4eec\u66f4\u65b0\u4e86\u670d\u52a1\u534f\u8bae\u548c\u9690\u79c1\u58f0\u660e\u3002\x3cbr\x3e\u8be6\u60c5\u5185\u5bb9\u8bf7\u53c2\u89c1\u6700\u65b0\u7684\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/terms.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e' + mallName + '\u670d\u52a1\u534f\u8bae\x3c/a\x3e\u3001\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/privacy-statement.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e\u5173\u4e8e' + mallName + "\u4e0e\u9690\u79c1\u7684\u58f0\u660e\x3c/a\x3e\u3002";
				html += "\x3c/div\x3e";
				html += '\x3cdiv class\x3d"hr-25"\x3e\x3c/div\x3e';
				ec.agreement.box("\u53d8\u66f4\u901a\u77e5", html, [134, 10023]);
				return false
			}
			if(reSignUser) {
				ec.agreement.dapType = 1;
				var html = "";
				html += '\x3cdiv class\x3d"f14 pdt-20" style\x3d"color: #666"\x3e';
				html += '  \u4e3a\u4e86\u7ed9\u60a8\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52a1\uff0c\u6211\u4eec\u66f4\u65b0\u4e86\u670d\u52a1\u534f\u8bae\u3002\x3cbr\x3e\u8be6\u60c5\u5185\u5bb9\u8bf7\u53c2\u89c1\u6700\u65b0\u7684\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/terms.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e' + mallName + "\u670d\u52a1\u534f\u8bae\x3c/a\x3e\u3002";
				html += "\x3c/div\x3e";
				html += '\x3cdiv class\x3d"hr-25"\x3e\x3c/div\x3e';
				ec.agreement.box("\u670d\u52a1\u534f\u8bae\u53d8\u66f4\u901a\u77e5", html, [134]);
				return false
			}
			if(reSignPrivacy) {
				ec.agreement.dapType = 2;
				var html = "";
				html += '\x3cdiv class\x3d"f14 pdt-20" style\x3d"color: #666"\x3e';
				html += '  \u4e3a\u4e86\u7ed9\u60a8\u63d0\u4f9b\u66f4\u597d\u7684\u670d\u52a1\uff0c\u6211\u4eec\u66f4\u65b0\u4e86\u9690\u79c1\u58f0\u660e\u3002\x3cbr\x3e\u8be6\u60c5\u5185\u5bb9\u8bf7\u53c2\u89c1\u6700\u65b0\u7684\x3ca href\x3d"' + huaweiConsumer + '/minisite/cloudservice/vmall/privacy-statement.htm?country\x3dCN\x26language\x3dzh_CN" target\x3d"_blank" class\x3d"blue"\x3e\u5173\u4e8e' + mallName + "\u4e0e\u9690\u79c1\u7684\u58f0\u660e\x3c/a\x3e\u3002";
				html += "\x3c/div\x3e";
				html += '\x3cdiv class\x3d"hr-25"\x3e\x3c/div\x3e';
				ec.agreement.box("\u9690\u79c1\u58f0\u660e\u53d8\u66f4\u901a\u77e5", html, [10023]);
				return false
			}
			ec.agreement.next();
			ec.util.cookie.set("hasSigned", "1", {
				domain: mallDomain,
				path: "/"
			})
		}
	})
};
ec.agreement.init = function() {
	if(!ec.account.isLogin()) return false;
	if(window.location.pathname.match(/^\/product\/\d+\.html/) && !ec.agreement.prdshow || window.location.pathname.startsWith("/order/nowConfirmcart") && !ec.agreement.confirmshow) {
		ec.agreement.next();
		ec.agreement.transmitUserInfo();
		return false
	} else if(ec.util.cookie.get("hasSigned") > 0) {
		ec.agreement.next();
		return false
	}
	ec.agreement.fetchNew()
};
ec.agreement.next = function() {
	if(ec.popMarketingMessage && "function" === typeof ec.popMarketingMessage.init) ec.popMarketingMessage.init()
};
ec.agreement.box = function(title, html, agrTypes) {
	html = '\x3cdiv style\x3d"margin: 0 -6px;"\x3e' + html + "\x3c/div\x3e";
	var box = new ec.box(html, {
		boxid: "jb-agreement",
		boxclass: "ol_box_4 ol_box_noclose",
		width: 460,
		title: title,
		okBtnName: "\u540c\u610f",
		oncancel: function() {
			ec.agreement.confirm(agrTypes, title);
			return false
		},
		onok: function() {
			box.close();
			$(".ol_box_mask").remove();
			ec.agreement.sign(agrTypes, true, title);
			return false
		}
	});
	box.open()
};
ec.groupad = ec.groupad || {};
ec.groupad.init = function() {
	if(!ec.account.isLogin()) return false;
	if(ec.util.cookie.get("hasGroupAD") && ec.util.cookie.get("hasGroupAD") == 1) return false;
	if(window.location.pathname == "/" || window.location.pathname == "/index.html") ec.groupad.querySaleInfoCfg()
};
ec.groupad.queryUserInfo = function() {
	$.ajax({
		url: openApiDomain + "/mcp/queryUserInfo?lang\x3dzh-CN\x26country\x3d" + mallCountry + "\x26portal\x3d1",
		method: "get",
		dataType: "json",
		contentType: "text/plain",
		success: function(result) {
			if(result && result.userInfo) {
				var groupId = result.userInfo.groupId;
				if(groupId) {
					ec.util.cookie.set("isGroupUser", "true", {
						domain: mallDomain
					});
					ec.util.cookie.set("groupflag", "true", {
						domain: mallDomain
					})
				} else {
					ec.util.cookie.set("isGroupUser", "false", {
						domain: mallDomain
					});
					ec.util.cookie.set("groupflag", null, {
						domain: mallDomain
					})
				}
				ec.groupad.queryGroupAdvertisementForUC()
			}
		}
	})
};
ec.groupad.querySaleInfoCfg = function() {
	$.ajax({
		url: openApiDomain + "/mcp/promotion/querySaleInfoCfg?lang\x3dzh-CN\x26country\x3d" + mallCountry + "\x26portal\x3d1",
		method: "get",
		dataType: "json",
		contentType: "text/plain",
		success: function(result) {
			if(result && result.saleConfig)
				if(result.saleConfig.sendPushMsg && result.saleConfig.sendPushMsg == "1") ec.groupad.queryGroupAdvertisement()
		}
	})
};
ec.groupad.queryGroupAdvertisement = function() {
	$.ajax({
		url: openApiDomain + "/mcp/config/queryGroupAdvertisement?lang\x3dzh-CN\x26country\x3d" + mallCountry + "\x26portal\x3d1\x26placeholder\x3dweb_group_ads",
		method: "get",
		dataType: "json",
		contentType: "text/plain",
		success: function(result) {
			if(result && result.advertisementInfos && result.advertisementInfos.web_group_ads && result.advertisementInfos.web_group_ads.content) {
				var adsContent = XSS.decode(result.advertisementInfos.web_group_ads.content);
				var adsContentJson = JSON.parse(adsContent);
				if(adsContentJson && adsContentJson.groupAds) {
					var adPrdUrl = adsContentJson.groupAds[0].adPrdUrl;
					var adPicUrl = adsContentJson.groupAds[0].adPicUrl;
					ec.groupad.box(adPrdUrl, adPicUrl)
				}
			}
		}
	})
};
ec.groupad.queryGroupAdvertisementForUC = function() {
	$.ajax({
		url: openApiDomain + "/mcp/config/queryGroupAdvertisement?lang\x3dzh-CN\x26country\x3d" + mallCountry + "\x26portal\x3d1\x26placeholder\x3dweb_group_ads",
		method: "get",
		dataType: "json",
		contentType: "text/plain",
		success: function(result) {
			if(result && result.advertisementInfos && result.advertisementInfos.web_group_ads && result.advertisementInfos.web_group_ads.content) {
				var adsContent = XSS.decode(result.advertisementInfos.web_group_ads.content);
				var adsContentJson = JSON.parse(adsContent);
				if(adsContentJson && adsContentJson.groupAds) {
					var adPrdUrl = adsContentJson.groupAds[0].adPrdUrl;
					var expiresDate = new Date;
					expiresDate.setHours("23");
					expiresDate.setMinutes("59");
					expiresDate.setSeconds("59");
					ec.util.cookie.set("adPrdUrl", adPrdUrl, {
						expires: expiresDate,
						domain: mallDomain
					})
				} else ec.util.cookie.set("adPrdUrl", null)
			}
			ec.account.showEnterpriseUserNav()
		}
	})
};
ec.groupad.box = function(adPrdUrl, adPicUrl) {
	var img = new Image;
	img.src = adPicUrl;
	img.onload = function() {
		var w = this.width,
			h = this.height;
		var height = Math.round(h / w * 594);
		html = '\x3ca  id\x3d"groupAdId" target\x3d"_blank" href\x3d"' + adPrdUrl + '"\x3e\x3cimg src\x3d"' + adPicUrl + '" width\x3d"594" height\x3d"' + height + '"\x3e\x3c/a\x3e';
		var box = new ec.box(html, {
			boxid: "jb-group-ad",
			boxclass: "ol_box_4 ol_box_images",
			width: 658,
			showButton: false
		});
		box.open();
		$("#groupAdId").click(function() {
			box.close()
		});
		var expiresDate = new Date;
		expiresDate.setHours("23");
		expiresDate.setMinutes("59");
		expiresDate.setSeconds("59");
		ec.util.cookie.set("hasGroupAD", 1, {
			expires: expiresDate,
			domain: mallDomain
		});
		ec.util.cookie.set("adPrdUrl", adPrdUrl, {
			expires: expiresDate,
			domain: mallDomain
		});
		ec.account.showEnterpriseUserNav()
	}
};
ec.agreement.transmitUserInfo = function() {
	if(ec.util.cookie.get("UserInfoHasTransmitted" + ec.util.cookie.get("uid"))) return false;
	ec.util.cookie.set("UserInfoHasTransmitted" + ec.util.cookie.get("uid"), "1");
	$.ajax({
		url: openApiDomain + "/mcp/user/transmitUserInfo",
		method: "post",
		dataType: "json",
		contentType: "text/plain",
		data: JSON.stringify({
			lang: "zh-CN",
			country: mallCountry,
			portal: 1
		})
	})
};
ec.agreement.sign = function(agrTypes, agree, title) {
	var data = {
		option: agree ? "agree" : "disagree",
		type: ec.agreement.dapType,
		URL: location.origin + location.pathname,
		click: 1
	};
	ec.dapClick(300000701, data);
	if(agree) {
		if(ec.agreement.showMsgSetter) {
			data.marketing = $('#jb-agreement input[name\x3d"confirmMsgPush"]').prop("checked") ? 1 : 0;
			$.ajax({
				url: openApiDomain + "/mcp/v1/promotion/saveSaleInfo",
				method: "post",
				dataType: "json",
				contentType: "text/plain",
				data: JSON.stringify({
					lang: "zh-CN",
					country: mallCountry,
					portal: 1,
					agreeFlag: data.marketing
				}),
				success: function() {
					ec.agreement.next()
				}
			})
		} else ec.agreement.next();
		var signInfo = [];
		agrTypes.forEach(function(agrType) {
			signInfo.push({
				agrType: agrType,
				country: "cn",
				branchId: 0,
				language: "zh_cn",
				isAgree: agree
			})
		});
		$.ajax({
			url: openApiDomain + "/mcp/agreement/signAgreement",
			method: "post",
			dataType: "json",
			contentType: "text/plain",
			data: JSON.stringify({
				lang: "zh-CN",
				country: mallCountry,
				portal: 1,
				signInfo: signInfo,
				tokenType: 2
			})
		});
		ec.util.cookie.set("hasSigned", "1", {
			domain: mallDomain,
			path: "/"
		})
	}
};
ec.agreement.confirm = function(agrTypes, title) {
	$("#jb-agreement").hide();
	var html = "";
	html += '\x3cdiv class\x3d"pdt-20" style\x3d"color: #666; text-align: center; font-size: 18px;"\x3e';
	html += "  \u5c1a\u672a\u540c\u610f\u670d\u52a1\u6761\u6b3e\uff0c\u662f\u5426\u9000\u51fa\u5e10\u53f7\uff1f";
	html += "\x3c/div\x3e";
	html += '\x3cdiv class\x3d"hr-25"\x3e\x3c/div\x3e';
	html = '\x3cdiv style\x3d"margin: 0 -6px;"\x3e' + html + "\x3c/div\x3e";
	var box = new ec.box(html, {
		boxid: "jb-agreement-confirm",
		boxclass: "ol_box_4 ol_box_noclose",
		width: 460,
		okBtnName: "\u9000\u51fa",
		cancelBtnName: "\u53d6\u6d88",
		oncancel: function() {
			$("#jb-agreement").show();
			$("#jb-agreement-confirm").remove();
			ec.dapClick(300000702, {
				type: ec.agreement.dapType,
				option: "cancel",
				URL: location.origin + location.pathname,
				click: 1
			})
		},
		onok: function() {
			ec.dapClick(300000702, {
				type: ec.agreement.dapType,
				option: "logout",
				URL: location.origin + location.pathname,
				click: 1
			});
			ec.util.cookie.remove("hasSigned");
			ec.agreement.sign(agrTypes, false, title);
			box.close();
			ec.logout(domainMain + ec.util.cookie.get("lastReferrer"));
			return false
		}
	});
	box.open()
};
ec.filteredTxt = function(txt) {
	return txt.replace(/[^A-Za-z0-9 \u4e00-\u9fa5\-]/g, "")
};
ec.regExps = {
	taxpayerIdentityNum: /^[0-9A-Z]{15}$|^[0-9A-Z]{17,18}$|^[0-9A-Z]{20,21}$/
};
$(function() {
	if(!ec.account.isLogin()) {
		var validated = (location.search.match(/[?&]validated=([^&#]+)/i) || [])[1];
		var loginChannel = (location.search.match(/[?&]loginChannel=([^&#]+)/i) || [])[1];
		var ua = navigator.userAgent.toLowerCase();
		if(!validated && !loginChannel && !ua.match(/chrome/) && ua.match(/safari/) && !ec.util.cookie.get("safariredirected")) {
			var regUrl = $("#top-index-loginUrl").next().attr("href") || "";
			var uc = regUrl.substring(0, regUrl.indexOf("/", 9));
			if(uc) {
				ec.util.cookie.set("safariredirected", 1);
				location.href = uc + "/CAS/remoteLogin?loginChannel\x3d26000000\x26reqClientType\x3d26\x26lang\x3dzh-cn\x26loginUrl\x3d" + encodeURIComponent(location.href)
			}
		}
	}
});
"use strict";
var Slider = function(a) {
	this.i = 0;
	this.objid = a.objid || null;
	this.preclassname = a.preclassname || ".btn-prev";
	this.nextclassname = a.nextclassname || ".btn-next";
	this.listname = a.listname || ".grid-list";
	this.listitem = a.listitem || "li";
	this.shownum = a.shownum || 5.5;
	this.type = a.type || 1;
	this.autoplay = a.autoplay || false;
	this.offset = a.offset || 0
};
Slider.prototype = {
	init: function() {
		var b = this;
		var a = b.set();
		if(b.autoplay) {
			b.auto(a)
		} else {
			b.next(a);
			b.pre(a)
		}
	},
	auto: function(e) {
		var d = this,
			c = null;
		$(d.listname).find(d.listitem).eq(0).clone().appendTo(d.listname);
		e.len += 1;
		var b = (e.itemHeight) * (e.len - 1),
			a = function() {
				d.i++;
				if(Math.abs(parseInt(e.$grid.css("margin-top"))) == b) {
					e.$grid.css("margin-top", 0);
					d.i = 1
				}
				e.$grid.animate({
					"margin-top": "-" + (d.i * e.itemHeight * d.shownum) + "px"
				}, 500)
			};
		if(d.autoplay) {
			c = setInterval(a, 2000);
			e.$grid.hover(function() {
				clearInterval(c)
			}, function() {
				c = setInterval(a, 2000)
			})
		}
	},
	set: function() {
		var e = this,
			h = $(e.objid + " " + e.listitem),
			j = $(e.objid + " " + e.listname),
			i = $(e.objid + " " + e.preclassname),
			b = $(e.objid + " " + e.nextclassname),
			f = h.length,
			g = h.outerWidth(),
			a = h.outerHeight(),
			d = Math.ceil(f / e.shownum),
			c = 0;
		switch(e.type) {
			default:
				case 1:
				j.css("width", (g + 1) * f + "px");
			break;
			case 2:
					j.css("height", (a) * f + "px");
				break;
			case 3:
					g = g + 20;j.css("width", (g) * f + "px");
				break;
			case 4:
					g = g + 50;j.css("width", (g) * f + "px");
				break;
			case 5:
					j.css("width", (g + 1) * f + "px");
				if(f <= e.shownum) {
					b.addClass("disabled")
				} else {
					b.removeClass("disabled")
				}
				break
		}
		return {
			$item: h,
			$grid: j,
			$pre: i,
			$next: b,
			len: f,
			itemWidth: g,
			itemHeight: a,
			num: d,
			offset: c
		}
	},
	pre: function(b) {
		var a = this;
		b.$pre.bind("click", function() {
			if($(this).hasClass("disabled")) {
				return
			}
			a.i--;
			a.offset -= a.shownum;
			if(a.i - 1 < 0) {
				b.$pre.addClass("disabled")
			}
			b.$next.removeClass("disabled");
			switch(a.type) {
				default:
					case 1:
					b.$grid.animate({
					"margin-left": a.i == 0 ? 0 : parseInt(b.$grid.css("margin-left")) + (b.itemWidth * a.shownum) + "px"
				}, 500);
				break;
				case 2:
						b.$grid.animate({
						"margin-top": a.i == 0 ? 0 : parseInt(b.$grid.css("margin-top")) + (b.itemHeight * a.shownum) + "px"
					}, 500);
					break;
				case 3:
						case 4:
						if(a.offset < 0) {
						a.offset = 0;
						b.$pre.addClass("disabled")
					}b.$grid.animate({
						"margin-left": "-" + (a.offset * b.itemWidth) + "px"
					}, 500);
					break;
				case 5:
						b.$grid.animate({
						"margin-left": a.i == 0 ? 0 : parseInt(b.$grid.css("margin-left")) + (b.itemWidth * a.shownum) + "px"
					}, 500);
					break
			}
		})
	},
	next: function(b) {
		var a = this;
		switch(a.type) {
			case 3:
			case 4:
				if(a.offset + 1 >= b.num) {
					b.$next.addClass("disabled")
				}
				break
		}
		b.$next.bind("click", function() {
			if($(this).hasClass("disabled")) {
				return
			}
			a.i++;
			a.offset += a.shownum;
			b.$pre.removeClass("disabled");
			switch(a.type) {
				default:
					case 1:
					if(a.shownum > 1) {
					if(a.i + 1 == b.num) {
						var d = parseInt(b.$grid.css("margin-left"));
						var c = (b.len - ((a.i) * parseInt(a.shownum)) - 1 / 2) * b.itemWidth;
						b.$grid.animate({
							"margin-left": d - c + "px"
						}, 500)
					} else {
						b.$grid.animate({
							"margin-left": "-" + (a.i * b.itemWidth * parseInt(a.shownum)) + "px"
						}, 500)
					}
				} else {
					b.$grid.animate({
						"margin-left": "-" + (a.i * b.itemWidth * a.shownum) + "px"
					}, 500)
				}if(a.i + 1 == b.num) {
					b.$next.addClass("disabled")
				}
				break;
				case 2:
						b.$grid.animate({
						"margin-top": "-" + (a.i * b.itemHeight * a.shownum) + "px"
					}, 500);
					if(a.i + 1 == b.num) {
						b.$next.addClass("disabled")
					}
					break;
				case 3:
						case 4:
						if(a.offset + a.shownum > b.len) {
						a.offset = b.len - a.shownum;
						b.$grid.animate({
							"margin-left": "-" + (a.offset * b.itemWidth) + "px"
						}, 500);
						b.$next.addClass("disabled")
					} else {
						b.$grid.animate({
							"margin-left": "-" + (a.offset * b.itemWidth) + "px"
						}, 500)
					}break;
				case 5:
						if(a.shownum > 1) {
						if(a.i + 1 == b.num) {
							var d = parseInt(b.$grid.css("margin-left"));
							var c = (b.len - ((a.i) * parseInt(a.shownum))) * b.itemWidth;
							b.$grid.animate({
								"margin-left": d - c + "px"
							}, 500)
						} else {
							b.$grid.animate({
								"margin-left": "-" + (a.i * b.itemWidth * parseInt(a.shownum)) + "px"
							}, 500)
						}
					} else {
						b.$grid.animate({
							"margin-left": "-" + (a.i * b.itemWidth * a.shownum) + "px"
						}, 500)
					}if(a.i + 1 == b.num) {
						b.$next.addClass("disabled")
					}
					break
			}
		})
	}
};
window.Swiper = function(aa, ab) {
	function ac(ae, af) {
		return document.querySelectorAll ? (af || document).querySelectorAll(ae) : jQuery(ae, af)
	}

	function ad(ae) {
		return "[object Array]" === Object.prototype.toString.apply(ae) ? !0 : !1
	}

	function y() {
		var ae = e - h;
		return ab.freeMode && (ae = e - h), ab.slidesPerView > b.slides.length && !ab.centeredSlides && (ae = 0), 0 > ae && (ae = 0), ae
	}

	function z() {
		function ae(am) {
			var aj, ak, al = function() {
				"undefined" != typeof b && null !== b && (void 0 !== b.imagesLoaded && b.imagesLoaded++, b.imagesLoaded === b.imagesToLoad.length && (b.reInit(), ab.onImagesReady && b.fireCallback(ab.onImagesReady, b)))
			};
			am.complete ? al() : (ak = am.currentSrc || am.getAttribute("src"), ak ? (aj = new Image, aj.onload = al, aj.onerror = al, aj.src = ak) : al())
		}
		var af = b.h.addEventListener,
			ag = "wrapper" === ab.eventTarget ? b.wrapper : b.container;
		if(b.browser.ie10 || b.browser.ie11 ? (af(ag, b.touchEvents.touchStart, J), af(document, b.touchEvents.touchMove, K), af(document, b.touchEvents.touchEnd, L)) : (b.support.touch && (af(ag, "touchstart", J), af(ag, "touchmove", K), af(ag, "touchend", L)), ab.simulateTouch && (af(ag, "mousedown", J), af(document, "mousemove", K), af(document, "mouseup", L))), ab.autoResize && af(window, "resize", b.resizeFix), A(), b._wheelEvent = !1, ab.mousewheelControl) {
			if(void 0 !== document.onmousewheel && (b._wheelEvent = "mousewheel"), !b._wheelEvent) {
				try {
					new WheelEvent("wheel"), b._wheelEvent = "wheel"
				} catch(ah) {}
			}
			b._wheelEvent || (b._wheelEvent = "DOMMouseScroll"), b._wheelEvent && af(b.container, b._wheelEvent, D)
		}
		if(ab.keyboardControl && af(document, "keydown", C), ab.updateOnImagesReady) {
			b.imagesToLoad = ac("img", b.container);
			for(var ai = 0; ai < b.imagesToLoad.length; ai++) {
				ae(b.imagesToLoad[ai])
			}
		}
	}

	function A() {
		var ae, af = b.h.addEventListener;
		if(ab.preventLinks) {
			var ag = ac("a", b.container);
			for(ae = 0; ae < ag.length; ae++) {
				af(ag[ae], "click", H)
			}
		}
		if(ab.releaseFormElements) {
			var ah = ac("input, textarea, select", b.container);
			for(ae = 0; ae < ah.length; ae++) {
				af(ah[ae], b.touchEvents.touchStart, I, !0), b.support.touch && ab.simulateTouch && af(ah[ae], "mousedown", I, !0)
			}
		}
		if(ab.onSlideClick) {
			for(ae = 0; ae < b.slides.length; ae++) {
				af(b.slides[ae], "click", E)
			}
		}
		if(ab.onSlideTouch) {
			for(ae = 0; ae < b.slides.length; ae++) {
				af(b.slides[ae], b.touchEvents.touchStart, F)
			}
		}
	}

	function B() {
		var ae, af = b.h.removeEventListener;
		if(ab.onSlideClick) {
			for(ae = 0; ae < b.slides.length; ae++) {
				af(b.slides[ae], "click", E)
			}
		}
		if(ab.onSlideTouch) {
			for(ae = 0; ae < b.slides.length; ae++) {
				af(b.slides[ae], b.touchEvents.touchStart, F)
			}
		}
		if(ab.releaseFormElements) {
			var ag = ac("input, textarea, select", b.container);
			for(ae = 0; ae < ag.length; ae++) {
				af(ag[ae], b.touchEvents.touchStart, I, !0), b.support.touch && ab.simulateTouch && af(ag[ae], "mousedown", I, !0)
			}
		}
		if(ab.preventLinks) {
			var ah = ac("a", b.container);
			for(ae = 0; ae < ah.length; ae++) {
				af(ah[ae], "click", H)
			}
		}
	}

	function C(al) {
		var am = al.keyCode || al.charCode;
		if(!(al.shiftKey || al.altKey || al.ctrlKey || al.metaKey)) {
			if(37 === am || 39 === am || 38 === am || 40 === am) {
				for(var an = !1, ao = b.h.getOffset(b.container), ae = b.h.windowScroll().left, af = b.h.windowScroll().top, ag = b.h.windowWidth(), ah = b.h.windowHeight(), ai = [
						[ao.left, ao.top],
						[ao.left + b.width, ao.top],
						[ao.left, ao.top + b.height],
						[ao.left + b.width, ao.top + b.height]
					], aj = 0; aj < ai.length; aj++) {
					var ak = ai[aj];
					ak[0] >= ae && ak[0] <= ae + ag && ak[1] >= af && ak[1] <= af + ah && (an = !0)
				}
				if(!an) {
					return
				}
			}
			l ? ((37 === am || 39 === am) && (al.preventDefault ? al.preventDefault() : al.returnValue = !1), 39 === am && b.swipeNext(), 37 === am && b.swipePrev()) : ((38 === am || 40 === am) && (al.preventDefault ? al.preventDefault() : al.returnValue = !1), 40 === am && b.swipeNext(), 38 === am && b.swipePrev())
		}
	}

	function D(ae) {
		var af = b._wheelEvent,
			ag = 0;
		if(ae.detail) {
			ag = -ae.detail
		} else {
			if("mousewheel" === af) {
				if(ab.mousewheelControlForceToAxis) {
					if(l) {
						if(!(Math.abs(ae.wheelDeltaX) > Math.abs(ae.wheelDeltaY))) {
							return
						}
						ag = ae.wheelDeltaX
					} else {
						if(!(Math.abs(ae.wheelDeltaY) > Math.abs(ae.wheelDeltaX))) {
							return
						}
						ag = ae.wheelDeltaY
					}
				} else {
					ag = ae.wheelDelta
				}
			} else {
				if("DOMMouseScroll" === af) {
					ag = -ae.detail
				} else {
					if("wheel" === af) {
						if(ab.mousewheelControlForceToAxis) {
							if(l) {
								if(!(Math.abs(ae.deltaX) > Math.abs(ae.deltaY))) {
									return
								}
								ag = -ae.deltaX
							} else {
								if(!(Math.abs(ae.deltaY) > Math.abs(ae.deltaX))) {
									return
								}
								ag = -ae.deltaY
							}
						} else {
							ag = Math.abs(ae.deltaX) > Math.abs(ae.deltaY) ? -ae.deltaX : -ae.deltaY
						}
					}
				}
			}
		}
		if(ab.freeMode) {
			var ah = b.getWrapperTranslate() + ag;
			if(ah > 0 && (ah = 0), ah < -y() && (ah = -y()), b.setWrapperTransition(0), b.setWrapperTranslate(ah), b.updateActiveSlide(ah), 0 === ah || ah === -y()) {
				return
			}
		} else {
			(new Date).getTime() - t > 60 && (0 > ag ? b.swipeNext() : b.swipePrev()), t = (new Date).getTime()
		}
		return ab.autoplay && b.stopAutoplay(!0), ae.preventDefault ? ae.preventDefault() : ae.returnValue = !1, !1
	}

	function E(ae) {
		b.allowSlideClick && (G(ae), b.fireCallback(ab.onSlideClick, b, ae))
	}

	function F(ae) {
		G(ae), b.fireCallback(ab.onSlideTouch, b, ae)
	}

	function G(ae) {
		if(ae.currentTarget) {
			b.clickedSlide = ae.currentTarget
		} else {
			var af = ae.srcElement;
			do {
				if(af.className.indexOf(ab.slideClass) > -1) {
					break
				}
				af = af.parentNode
			} while (af);
			b.clickedSlide = af
		}
		b.clickedSlideIndex = b.slides.indexOf(b.clickedSlide), b.clickedSlideLoopIndex = b.clickedSlideIndex - (b.loopedSlides || 0)
	}

	function H(ae) {
		return b.allowLinks ? void 0 : (ae.preventDefault ? ae.preventDefault() : ae.returnValue = !1, ab.preventLinksPropagation && "stopPropagation" in ae && ae.stopPropagation(), !1)
	}

	function I(ae) {
		return ae.stopPropagation ? ae.stopPropagation() : ae.returnValue = !1, !1
	}

	function J(ae) {
		if(ab.preventLinks && (b.allowLinks = !0), b.isTouched || ab.onlyExternal) {
			return !1
		}
		var af = ae.target || ae.srcElement;
		document.activeElement && document.activeElement !== document.body && document.activeElement !== af && document.activeElement.blur();
		var ag = "input select textarea".split(" ");
		if(ab.noSwiping && af && N(af)) {
			return !1
		}
		if(Y = !1, b.isTouched = !0, U = "touchstart" === ae.type, !U && "which" in ae && 3 === ae.which) {
			return b.isTouched = !1, !1
		}
		if(!U || 1 === ae.targetTouches.length) {
			b.callPlugins("onTouchStartBegin"), !U && !b.isAndroid && ag.indexOf(af.tagName.toLowerCase()) < 0 && (ae.preventDefault ? ae.preventDefault() : ae.returnValue = !1);
			var ah = U ? ae.targetTouches[0].pageX : ae.pageX || ae.clientX,
				ai = U ? ae.targetTouches[0].pageY : ae.pageY || ae.clientY;
			b.touches.startX = b.touches.currentX = ah, b.touches.startY = b.touches.currentY = ai, b.touches.start = b.touches.current = l ? ah : ai, b.setWrapperTransition(0), b.positions.start = b.positions.current = b.getWrapperTranslate(), b.setWrapperTranslate(b.positions.start), b.times.start = (new Date).getTime(), g = void 0, ab.moveStartThreshold > 0 && (v = !1), ab.onTouchStart && b.fireCallback(ab.onTouchStart, b, ae), b.callPlugins("onTouchStartEnd")
		}
	}

	function K(af) {
		if(b.isTouched && !ab.onlyExternal && (!U || "mousemove" !== af.type)) {
			var ak = U ? af.targetTouches[0].pageX : af.pageX || af.clientX,
				ae = U ? af.targetTouches[0].pageY : af.pageY || af.clientY;
			if("undefined" == typeof g && l && (g = !!(g || Math.abs(ae - b.touches.startY) > Math.abs(ak - b.touches.startX))), "undefined" != typeof g || l || (g = !!(g || Math.abs(ae - b.touches.startY) < Math.abs(ak - b.touches.startX))), g) {
				return void(b.isTouched = !1)
			}
			if(l) {
				if(!ab.swipeToNext && ak < b.touches.startX || !ab.swipeToPrev && ak > b.touches.startX) {
					return
				}
			} else {
				if(!ab.swipeToNext && ae < b.touches.startY || !ab.swipeToPrev && ae > b.touches.startY) {
					return
				}
			}
			if(af.assignedToSwiper) {
				return void(b.isTouched = !1)
			}
			if(af.assignedToSwiper = !0, ab.preventLinks && (b.allowLinks = !1), ab.onSlideClick && (b.allowSlideClick = !1), ab.autoplay && b.stopAutoplay(!0), !U || 1 === af.touches.length) {
				if(b.isMoved || (b.callPlugins("onTouchMoveStart"), ab.loop && (b.fixLoop(), b.positions.start = b.getWrapperTranslate()), ab.onTouchMoveStart && b.fireCallback(ab.onTouchMoveStart, b)), b.isMoved = !0, af.preventDefault ? af.preventDefault() : af.returnValue = !1, b.touches.current = l ? ak : ae, b.positions.current = (b.touches.current - b.touches.start) * ab.touchRatio + b.positions.start, b.positions.current > 0 && ab.onResistanceBefore && b.fireCallback(ab.onResistanceBefore, b, b.positions.current), b.positions.current < -y() && ab.onResistanceAfter && b.fireCallback(ab.onResistanceAfter, b, Math.abs(b.positions.current + y())), ab.resistance && "100%" !== ab.resistance) {
					var ag;
					if(b.positions.current > 0 && (ag = 1 - b.positions.current / h / 2, b.positions.current = .5 > ag ? h / 2 : b.positions.current * ag), b.positions.current < -y()) {
						var ah = (b.touches.current - b.touches.start) * ab.touchRatio + (y() + b.positions.start);
						ag = (h + ah) / h;
						var ai = b.positions.current - ah * (1 - ag) / 2,
							aj = -y() - h / 2;
						b.positions.current = aj > ai || 0 >= ag ? aj : ai
					}
				}
				if(ab.resistance && "100%" === ab.resistance && (b.positions.current > 0 && (!ab.freeMode || ab.freeModeFluid) && (b.positions.current = 0), b.positions.current < -y() && (!ab.freeMode || ab.freeModeFluid) && (b.positions.current = -y())), !ab.followFinger) {
					return
				}
				if(ab.moveStartThreshold) {
					if(Math.abs(b.touches.current - b.touches.start) > ab.moveStartThreshold || v) {
						if(!v) {
							return v = !0, void(b.touches.start = b.touches.current)
						}
						b.setWrapperTranslate(b.positions.current)
					} else {
						b.positions.current = b.positions.start
					}
				} else {
					b.setWrapperTranslate(b.positions.current)
				}
				return(ab.freeMode || ab.watchActiveIndex) && b.updateActiveSlide(b.positions.current), ab.grabCursor && (b.container.style.cursor = "move", b.container.style.cursor = "grabbing", b.container.style.cursor = "-moz-grabbin", b.container.style.cursor = "-webkit-grabbing"), w || (w = b.touches.current), x || (x = (new Date).getTime()), b.velocity = (b.touches.current - w) / ((new Date).getTime() - x) / 2, Math.abs(b.touches.current - w) < 2 && (b.velocity = 0), w = b.touches.current, x = (new Date).getTime(), b.callPlugins("onTouchMoveEnd"), ab.onTouchMove && b.fireCallback(ab.onTouchMove, b, af), !1
			}
		}
	}

	function L(ar) {
		if(g && b.swipeReset(), !ab.onlyExternal && b.isTouched) {
			b.isTouched = !1, ab.grabCursor && (b.container.style.cursor = "move", b.container.style.cursor = "grab", b.container.style.cursor = "-moz-grab", b.container.style.cursor = "-webkit-grab"), b.positions.current || 0 === b.positions.current || (b.positions.current = b.positions.start), ab.followFinger && b.setWrapperTranslate(b.positions.current), b.times.end = (new Date).getTime(), b.touches.diff = b.touches.current - b.touches.start, b.touches.abs = Math.abs(b.touches.diff), b.positions.diff = b.positions.current - b.positions.start, b.positions.abs = Math.abs(b.positions.diff);
			var au = b.positions.diff,
				ae = b.positions.abs,
				af = b.times.end - b.times.start;
			5 > ae && 300 > af && b.allowLinks === !1 && (ab.freeMode || 0 === ae || b.swipeReset(), ab.preventLinks && (b.allowLinks = !0), ab.onSlideClick && (b.allowSlideClick = !0)), setTimeout(function() {
				"undefined" != typeof b && null !== b && (ab.preventLinks && (b.allowLinks = !0), ab.onSlideClick && (b.allowSlideClick = !0))
			}, 100);
			var ag = y();
			if(!b.isMoved && ab.freeMode) {
				return b.isMoved = !1, ab.onTouchEnd && b.fireCallback(ab.onTouchEnd, b, ar), void b.callPlugins("onTouchEnd")
			}
			if(!b.isMoved || b.positions.current > 0 || b.positions.current < -ag) {
				return b.swipeReset(), ab.onTouchEnd && b.fireCallback(ab.onTouchEnd, b, ar), void b.callPlugins("onTouchEnd")
			}
			if(b.isMoved = !1, ab.freeMode) {
				if(ab.freeModeFluid) {
					var ah, aj = 1e3 * ab.momentumRatio,
						al = b.velocity * aj,
						am = b.positions.current + al,
						an = !1,
						ao = 20 * Math.abs(b.velocity) * ab.momentumBounceRatio; - ag > am && (ab.momentumBounce && b.support.transitions ? (-ao > am + ag && (am = -ag - ao), ah = -ag, an = !0, Y = !0) : am = -ag), am > 0 && (ab.momentumBounce && b.support.transitions ? (am > ao && (am = ao), ah = 0, an = !0, Y = !0) : am = 0), 0 !== b.velocity && (aj = Math.abs((am - b.positions.current) / b.velocity)), b.setWrapperTranslate(am), b.setWrapperTransition(aj), ab.momentumBounce && an && b.wrapperTransitionEnd(function() {
						Y && (ab.onMomentumBounce && b.fireCallback(ab.onMomentumBounce, b), b.callPlugins("onMomentumBounce"), b.setWrapperTranslate(ah), b.setWrapperTransition(300))
					}), b.updateActiveSlide(am)
				}
				return(!ab.freeModeFluid || af >= 300) && b.updateActiveSlide(b.positions.current), ab.onTouchEnd && b.fireCallback(ab.onTouchEnd, b, ar), void b.callPlugins("onTouchEnd")
			}
			f = 0 > au ? "toNext" : "toPrev", "toNext" === f && 300 >= af && (30 > ae || !ab.shortSwipes ? b.swipeReset() : b.swipeNext(!0, !0)), "toPrev" === f && 300 >= af && (30 > ae || !ab.shortSwipes ? b.swipeReset() : b.swipePrev(!0, !0));
			var ap = 0;
			if("auto" === ab.slidesPerView) {
				for(var aq, at = Math.abs(b.getWrapperTranslate()), ai = 0, ak = 0; ak < b.slides.length; ak++) {
					if(aq = l ? b.slides[ak].getWidth(!0, ab.roundLengths) : b.slides[ak].getHeight(!0, ab.roundLengths), ai += aq, ai > at) {
						ap = aq;
						break
					}
				}
				ap > h && (ap = h)
			} else {
				ap = d * ab.slidesPerView
			}
			"toNext" === f && af > 300 && (ae >= ap * ab.longSwipesRatio ? b.swipeNext(!0, !0) : b.swipeReset()), "toPrev" === f && af > 300 && (ae >= ap * ab.longSwipesRatio ? b.swipePrev(!0, !0) : b.swipeReset()), ab.onTouchEnd && b.fireCallback(ab.onTouchEnd, b, ar), b.callPlugins("onTouchEnd")
		}
	}

	function M(ae, af) {
		return ae && ae.getAttribute("class") && ae.getAttribute("class").indexOf(af) > -1
	}

	function N(ae) {
		var af = !1;
		do {
			M(ae, ab.noSwipingClass) && (af = !0), ae = ae.parentElement
		} while (!af && ae.parentElement && !M(ae, ab.wrapperClass));
		return !af && M(ae, ab.wrapperClass) && M(ae, ab.noSwipingClass) && (af = !0), af
	}

	function O(ag, ah) {
		var ae, af = document.createElement("div");
		return af.innerHTML = ah, ae = af.firstChild, ae.className += " " + ag, ae.outerHTML
	}

	function P(am, an, ae) {
		function af() {
			var ap = +new Date,
				ao = ap - ah;
			ai += aj * ao / (1e3 / 60), al = "toNext" === ak ? ai > am : am > ai, al ? (b.setWrapperTranslate(Math.ceil(ai)), b._DOMAnimating = !0, window.setTimeout(function() {
				af()
			}, 1e3 / 60)) : (ab.onSlideChangeEnd && ("to" === an ? ae.runCallbacks === !0 && b.fireCallback(ab.onSlideChangeEnd, b, ak) : b.fireCallback(ab.onSlideChangeEnd, b, ak)), b.setWrapperTranslate(am), b._DOMAnimating = !1)
		}
		var ag = "to" === an && ae.speed >= 0 ? ae.speed : ab.speed,
			ah = +new Date;
		if(b.support.transitions || !ab.DOMAnimation) {
			b.setWrapperTranslate(am), b.setWrapperTransition(ag)
		} else {
			var ai = b.getWrapperTranslate(),
				aj = Math.ceil((am - ai) / ag * (1e3 / 60)),
				ak = ai > am ? "toNext" : "toPrev",
				al = "toNext" === ak ? ai > am : am > ai;
			if(b._DOMAnimating) {
				return
			}
			af()
		}
		b.updateActiveSlide(am), ab.onSlideNext && "next" === an && ae.runCallbacks === !0 && b.fireCallback(ab.onSlideNext, b, am), ab.onSlidePrev && "prev" === an && ae.runCallbacks === !0 && b.fireCallback(ab.onSlidePrev, b, am), ab.onSlideReset && "reset" === an && ae.runCallbacks === !0 && b.fireCallback(ab.onSlideReset, b, am), "next" !== an && "prev" !== an && "to" !== an || ae.runCallbacks !== !0 || Q(an)
	}

	function Q(ae) {
		if(b.callPlugins("onSlideChangeStart"), ab.onSlideChangeStart) {
			if(ab.queueStartCallbacks && b.support.transitions) {
				if(b._queueStartCallbacks) {
					return
				}
				b._queueStartCallbacks = !0, b.fireCallback(ab.onSlideChangeStart, b, ae), b.wrapperTransitionEnd(function() {
					b._queueStartCallbacks = !1
				})
			} else {
				b.fireCallback(ab.onSlideChangeStart, b, ae)
			}
		}
		if(ab.onSlideChangeEnd) {
			if(b.support.transitions) {
				if(ab.queueEndCallbacks) {
					if(b._queueEndCallbacks) {
						return
					}
					b._queueEndCallbacks = !0, b.wrapperTransitionEnd(function(af) {
						b.fireCallback(ab.onSlideChangeEnd, af, ae)
					})
				} else {
					b.wrapperTransitionEnd(function(af) {
						b.fireCallback(ab.onSlideChangeEnd, af, ae)
					})
				}
			} else {
				ab.DOMAnimation || setTimeout(function() {
					b.fireCallback(ab.onSlideChangeEnd, b, ae)
				}, 10)
			}
		}
	}

	function R() {
		var ae = b.paginationButtons;
		if(ae) {
			for(var af = 0; af < ae.length; af++) {
				b.h.removeEventListener(ae[af], "click", T)
			}
		}
	}

	function S() {
		var ae = b.paginationButtons;
		if(ae) {
			for(var af = 0; af < ae.length; af++) {
				b.h.addEventListener(ae[af], "click", T)
			}
		}
	}

	function T(ae) {
		for(var af, ag = ae.target || ae.srcElement, ah = b.paginationButtons, ai = 0; ai < ah.length; ai++) {
			ag === ah[ai] && (af = ai)
		}
		ab.autoplay && b.stopAutoplay(!0), b.swipeTo(af)
	}

	function V() {
		W = setTimeout(function() {
			ab.loop ? (b.fixLoop(), b.swipeNext(!0, !0)) : b.swipeNext(!0, !0) || (ab.autoplayStopOnLast ? (clearTimeout(W), W = void 0) : b.swipeTo(0)), b.wrapperTransitionEnd(function() {
				"undefined" != typeof W && V()
			})
		}, ab.autoplay)
	}

	function X() {
		b.calcSlides(), ab.loader.slides.length > 0 && 0 === b.slides.length && b.loadSlides(), ab.loop && b.createLoop(), b.init(), z(), ab.pagination && b.createPagination(!0), ab.loop || ab.initialSlide > 0 ? b.swipeTo(ab.initialSlide, 0, !1) : b.updateActiveSlide(0), ab.autoplay && b.startAutoplay(), b.centerIndex = b.activeIndex, ab.onSwiperCreated && b.fireCallback(ab.onSwiperCreated, b), b.callPlugins("onSwiperCreated")
	}
	if(!document.body.outerHTML && document.body.__defineGetter__ && HTMLElement) {
		var a = HTMLElement.prototype;
		a.__defineGetter__ && a.__defineGetter__("outerHTML", function() {
			return(new XMLSerializer).serializeToString(this)
		})
	}
	if(window.getComputedStyle || (window.getComputedStyle = function(ae) {
			return this.el = ae, this.getPropertyValue = function(af) {
				var ag = /(\-([a-z]){1})/g;
				return "float" === af && (af = "styleFloat"), ag.test(af) && (af = af.replace(ag, function() {
					return arguments[2].toUpperCase()
				})), ae.currentStyle[af] ? ae.currentStyle[af] : null
			}, this
		}), Array.prototype.indexOf || (Array.prototype.indexOf = function(ag, ah) {
			for(var ae = ah || 0, af = this.length; af > ae; ae++) {
				if(this[ae] === ag) {
					return ae
				}
			}
			return -1
		}), (document.querySelectorAll || window.jQuery) && "undefined" != typeof aa && (aa.nodeType || 0 !== ac(aa).length)) {
		var b = this;
		b.touches = {
			start: 0,
			startX: 0,
			startY: 0,
			current: 0,
			currentX: 0,
			currentY: 0,
			diff: 0,
			abs: 0
		}, b.positions = {
			start: 0,
			abs: 0,
			diff: 0,
			current: 0
		}, b.times = {
			start: 0,
			end: 0
		}, b.id = (new Date).getTime(), b.container = aa.nodeType ? aa : ac(aa)[0], b.isTouched = !1, b.isMoved = !1, b.activeIndex = 0, b.centerIndex = 0, b.activeLoaderIndex = 0, b.activeLoopIndex = 0, b.previousIndex = null, b.velocity = 0, b.snapGrid = [], b.slidesGrid = [], b.imagesToLoad = [], b.imagesLoaded = 0, b.wrapperLeft = 0, b.wrapperRight = 0, b.wrapperTop = 0, b.wrapperBottom = 0, b.isAndroid = navigator.userAgent.toLowerCase().indexOf("android") >= 0;
		var c, d, e, f, g, h, i = {
			eventTarget: "wrapper",
			mode: "horizontal",
			touchRatio: 1,
			speed: 300,
			freeMode: !1,
			freeModeFluid: !1,
			momentumRatio: 1,
			momentumBounce: !0,
			momentumBounceRatio: 1,
			slidesPerView: 1,
			slidesPerGroup: 1,
			slidesPerViewFit: !0,
			simulateTouch: !0,
			followFinger: !0,
			shortSwipes: !0,
			longSwipesRatio: .5,
			moveStartThreshold: !1,
			onlyExternal: !1,
			createPagination: !0,
			pagination: !1,
			paginationElement: "span",
			paginationClickable: !1,
			paginationAsRange: !0,
			resistance: !0,
			scrollContainer: !1,
			preventLinks: !0,
			preventLinksPropagation: !1,
			noSwiping: !1,
			noSwipingClass: "swiper-no-swiping",
			initialSlide: 0,
			keyboardControl: !1,
			mousewheelControl: !1,
			mousewheelControlForceToAxis: !1,
			useCSS3Transforms: !0,
			autoplay: !1,
			autoplayDisableOnInteraction: !0,
			autoplayStopOnLast: !1,
			loop: !1,
			loopAdditionalSlides: 0,
			roundLengths: !1,
			calculateHeight: !1,
			cssWidthAndHeight: !1,
			updateOnImagesReady: !0,
			releaseFormElements: !0,
			watchActiveIndex: !1,
			visibilityFullFit: !1,
			offsetPxBefore: 0,
			offsetPxAfter: 0,
			offsetSlidesBefore: 0,
			offsetSlidesAfter: 0,
			centeredSlides: !1,
			queueStartCallbacks: !1,
			queueEndCallbacks: !1,
			autoResize: !0,
			resizeReInit: !1,
			DOMAnimation: !0,
			loader: {
				slides: [],
				slidesHTMLType: "inner",
				surroundGroups: 1,
				logic: "reload",
				loadAllSlides: !1
			},
			swipeToPrev: !0,
			swipeToNext: !0,
			slideElement: "div",
			slideClass: "swiper-slide",
			slideActiveClass: "swiper-slide-active",
			slideVisibleClass: "swiper-slide-visible",
			slideDuplicateClass: "swiper-slide-duplicate",
			wrapperClass: "swiper-wrapper",
			paginationElementClass: "swiper-pagination-switch",
			paginationActiveClass: "swiper-active-switch",
			paginationVisibleClass: "swiper-visible-switch",
			btnPrefix: "swiper-button"
		};
		ab = ab || {};
		for(var j in i) {
			if(j in ab && "object" == typeof ab[j]) {
				for(var k in i[j]) {
					k in ab[j] || (ab[j][k] = i[j][k])
				}
			} else {
				j in ab || (ab[j] = i[j])
			}
		}
		b.params = ab, ab.scrollContainer && (ab.freeMode = !0, ab.freeModeFluid = !0), ab.loop && (ab.resistance = "100%");
		var l = "horizontal" === ab.mode,
			m = ["mousedown", "mousemove", "mouseup"];
		b.browser.ie10 && (m = ["MSPointerDown", "MSPointerMove", "MSPointerUp"]), b.browser.ie11 && (m = ["pointerdown", "pointermove", "pointerup"]), b.touchEvents = {
			touchStart: b.support.touch || !ab.simulateTouch ? "touchstart" : m[0],
			touchMove: b.support.touch || !ab.simulateTouch ? "touchmove" : m[1],
			touchEnd: b.support.touch || !ab.simulateTouch ? "touchend" : m[2]
		};
		for(var n = b.container.childNodes.length - 1; n >= 0; n--) {
			if(b.container.childNodes[n].className) {
				for(var o = b.container.childNodes[n].className.split(/\s+/), p = 0; p < o.length; p++) {
					o[p] === ab.wrapperClass && (c = b.container.childNodes[n])
				}
			}
		}
		b.wrapper = c, b._extendSwiperSlide = function(ae) {
			return ae.append = function() {
				return ab.loop ? ae.insertAfter(b.slides.length - b.loopedSlides) : (b.wrapper.appendChild(ae), b.reInit()), ae
			}, ae.prepend = function() {
				return ab.loop ? (b.wrapper.insertBefore(ae, b.slides[b.loopedSlides]), b.removeLoopedSlides(), b.calcSlides(), b.createLoop()) : b.wrapper.insertBefore(ae, b.wrapper.firstChild), b.reInit(), ae
			}, ae.insertAfter = function(ag) {
				if("undefined" == typeof ag) {
					return !1
				}
				var af;
				return ab.loop ? (af = b.slides[ag + 1 + b.loopedSlides], af ? b.wrapper.insertBefore(ae, af) : b.wrapper.appendChild(ae), b.removeLoopedSlides(), b.calcSlides(), b.createLoop()) : (af = b.slides[ag + 1], b.wrapper.insertBefore(ae, af)), b.reInit(), ae
			}, ae.clone = function() {
				return b._extendSwiperSlide(ae.cloneNode(!0))
			}, ae.remove = function() {
				b.wrapper.removeChild(ae), b.reInit()
			}, ae.html = function(af) {
				return "undefined" == typeof af ? ae.innerHTML : (ae.innerHTML = af, ae)
			}, ae.index = function() {
				for(var af, ag = b.slides.length - 1; ag >= 0; ag--) {
					ae === b.slides[ag] && (af = ag)
				}
				return af
			}, ae.isActive = function() {
				return ae.index() === b.activeIndex ? !0 : !1
			}, ae.swiperSlideDataStorage || (ae.swiperSlideDataStorage = {}), ae.getData = function(af) {
				return ae.swiperSlideDataStorage[af]
			}, ae.setData = function(af, ag) {
				return ae.swiperSlideDataStorage[af] = ag, ae
			}, ae.data = function(af, ag) {
				return "undefined" == typeof ag ? ae.getAttribute("data-" + af) : (ae.setAttribute("data-" + af, ag), ae)
			}, ae.getWidth = function(af, ag) {
				return b.h.getWidth(ae, af, ag)
			}, ae.getHeight = function(af, ag) {
				return b.h.getHeight(ae, af, ag)
			}, ae.getOffset = function() {
				return b.h.getOffset(ae)
			}, ae
		}, b.calcSlides = function(ae) {
			var af = b.slides ? b.slides.length : !1;
			b.slides = [], b.displaySlides = [];
			for(var ag = 0; ag < b.wrapper.childNodes.length; ag++) {
				if(b.wrapper.childNodes[ag].className) {
					for(var ah = b.wrapper.childNodes[ag].className, ai = ah.split(/\s+/), aj = 0; aj < ai.length; aj++) {
						ai[aj] === ab.slideClass && b.slides.push(b.wrapper.childNodes[ag])
					}
				}
			}
			for(ag = b.slides.length - 1; ag >= 0; ag--) {
				b._extendSwiperSlide(b.slides[ag])
			}
			af !== !1 && (af !== b.slides.length || ae) && (B(), A(), b.updateActiveSlide(), b.params.pagination && b.createPagination(), b.callPlugins("numberOfSlidesChanged"))
		}, b.createSlide = function(ae, af, ag) {
			af = af || b.params.slideClass, ag = ag || ab.slideElement;
			var ah = document.createElement(ag);
			return ah.innerHTML = ae || "", ah.className = af, b._extendSwiperSlide(ah)
		}, b.appendSlide = function(af, ag, ae) {
			return af ? af.nodeType ? b._extendSwiperSlide(af).append() : b.createSlide(af, ag, ae).append() : void 0
		}, b.prependSlide = function(af, ag, ae) {
			return af ? af.nodeType ? b._extendSwiperSlide(af).prepend() : b.createSlide(af, ag, ae).prepend() : void 0
		}, b.insertSlideAfter = function(ag, ah, ae, af) {
			return "undefined" == typeof ag ? !1 : ah.nodeType ? b._extendSwiperSlide(ah).insertAfter(ag) : b.createSlide(ah, ae, af).insertAfter(ag)
		}, b.removeSlide = function(ae) {
			if(b.slides[ae]) {
				if(ab.loop) {
					if(!b.slides[ae + b.loopedSlides]) {
						return !1
					}
					b.slides[ae + b.loopedSlides].remove(), b.removeLoopedSlides(), b.calcSlides(), b.createLoop()
				} else {
					b.slides[ae].remove()
				}
				return !0
			}
			return !1
		}, b.removeLastSlide = function() {
			return b.slides.length > 0 ? (ab.loop ? (b.slides[b.slides.length - 1 - b.loopedSlides].remove(), b.removeLoopedSlides(), b.calcSlides(), b.createLoop()) : b.slides[b.slides.length - 1].remove(), !0) : !1
		}, b.removeAllSlides = function() {
			for(var ae = b.slides.length, af = b.slides.length - 1; af >= 0; af--) {
				b.slides[af].remove(), af === ae - 1 && b.setWrapperTranslate(0)
			}
		}, b.getSlide = function(ae) {
			return b.slides[ae]
		}, b.getLastSlide = function() {
			return b.slides[b.slides.length - 1]
		}, b.getFirstSlide = function() {
			return b.slides[0]
		}, b.activeSlide = function() {
			return b.slides[b.activeIndex]
		}, b.fireCallback = function() {
			var ae = arguments[0];
			if("[object Array]" === Object.prototype.toString.call(ae)) {
				for(var af = 0; af < ae.length; af++) {
					"function" == typeof ae[af] && ae[af](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])
				}
			} else {
				"[object String]" === Object.prototype.toString.call(ae) ? ab["on" + ae] && b.fireCallback(ab["on" + ae], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]) : ae(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])
			}
		}, b.addCallback = function(ag, ah) {
			var ae, af = this;
			return af.params["on" + ag] ? ad(this.params["on" + ag]) ? this.params["on" + ag].push(ah) : "function" == typeof this.params["on" + ag] ? (ae = this.params["on" + ag], this.params["on" + ag] = [], this.params["on" + ag].push(ae), this.params["on" + ag].push(ah)) : void 0 : (this.params["on" + ag] = [], this.params["on" + ag].push(ah))
		}, b.removeCallbacks = function(ae) {
			b.params["on" + ae] && (b.params["on" + ae] = null)
		};
		var q = [];
		for(var r in b.plugins) {
			if(ab[r]) {
				var s = b.plugins[r](b, ab[r]);
				s && q.push(s)
			}
		}
		b.callPlugins = function(af, ag) {
			ag || (ag = {});
			for(var ae = 0; ae < q.length; ae++) {
				af in q[ae] && q[ae][af](ag)
			}
		}, !b.browser.ie10 && !b.browser.ie11 || ab.onlyExternal || b.wrapper.classList.add("swiper-wp8-" + (l ? "horizontal" : "vertical")), ab.freeMode && (b.container.className += " swiper-free-mode"), b.initialized = !1, b.init = function(ae, af) {
			var ag = b.h.getWidth(b.container, !1, ab.roundLengths),
				ah = b.h.getHeight(b.container, !1, ab.roundLengths);
			if(ag !== b.width || ah !== b.height || ae) {
				b.width = ag, b.height = ah;
				var ai, aj, am, ao, aq, ar, at;
				h = l ? ag : ah;
				var au = b.wrapper;
				if(ae && b.calcSlides(af), "auto" === ab.slidesPerView) {
					var av = 0,
						aw = 0;
					ab.slidesOffset > 0 && (au.style.paddingLeft = "", au.style.paddingRight = "", au.style.paddingTop = "", au.style.paddingBottom = ""), au.style.width = "", au.style.height = "", ab.offsetPxBefore > 0 && (l ? b.wrapperLeft = ab.offsetPxBefore : b.wrapperTop = ab.offsetPxBefore), ab.offsetPxAfter > 0 && (l ? b.wrapperRight = ab.offsetPxAfter : b.wrapperBottom = ab.offsetPxAfter), ab.centeredSlides && (l ? (b.wrapperLeft = (h - this.slides[0].getWidth(!0, ab.roundLengths)) / 2, b.wrapperRight = (h - b.slides[b.slides.length - 1].getWidth(!0, ab.roundLengths)) / 2) : (b.wrapperTop = (h - b.slides[0].getHeight(!0, ab.roundLengths)) / 2, b.wrapperBottom = (h - b.slides[b.slides.length - 1].getHeight(!0, ab.roundLengths)) / 2)), l ? (b.wrapperLeft >= 0 && (au.style.paddingLeft = b.wrapperLeft + "px"), b.wrapperRight >= 0 && (au.style.paddingRight = b.wrapperRight + "px")) : (b.wrapperTop >= 0 && (au.style.paddingTop = b.wrapperTop + "px"), b.wrapperBottom >= 0 && (au.style.paddingBottom = b.wrapperBottom + "px")), ar = 0;
					var ax = 0;
					for(b.snapGrid = [], b.slidesGrid = [], am = 0, at = 0; at < b.slides.length; at++) {
						ai = b.slides[at].getWidth(!0, ab.roundLengths), aj = b.slides[at].getHeight(!0, ab.roundLengths), ab.calculateHeight && (am = Math.max(am, aj));
						var ay = l ? ai : aj;
						if(ab.centeredSlides) {
							var ak = at === b.slides.length - 1 ? 0 : b.slides[at + 1].getWidth(!0, ab.roundLengths),
								al = at === b.slides.length - 1 ? 0 : b.slides[at + 1].getHeight(!0, ab.roundLengths),
								an = l ? ak : al;
							if(ay > h) {
								if(ab.slidesPerViewFit) {
									b.snapGrid.push(ar + b.wrapperLeft), b.snapGrid.push(ar + ay - h + b.wrapperLeft)
								} else {
									for(var ap = 0; ap <= Math.floor(ay / (h + b.wrapperLeft)); ap++) {
										b.snapGrid.push(0 === ap ? ar + b.wrapperLeft : ar + b.wrapperLeft + h * ap)
									}
								}
								b.slidesGrid.push(ar + b.wrapperLeft)
							} else {
								b.snapGrid.push(ax), b.slidesGrid.push(ax)
							}
							ax += ay / 2 + an / 2
						} else {
							if(ay > h) {
								if(ab.slidesPerViewFit) {
									b.snapGrid.push(ar), b.snapGrid.push(ar + ay - h)
								} else {
									if(0 !== h) {
										for(var az = 0; az <= Math.floor(ay / h); az++) {
											b.snapGrid.push(ar + h * az)
										}
									} else {
										b.snapGrid.push(ar)
									}
								}
							} else {
								b.snapGrid.push(ar)
							}
							b.slidesGrid.push(ar)
						}
						ar += ay, av += ai, aw += aj
					}
					ab.calculateHeight && (b.height = am), l ? (e = av + b.wrapperRight + b.wrapperLeft, ab.cssWidthAndHeight && "height" !== ab.cssWidthAndHeight || (au.style.width = av + "px"), ab.cssWidthAndHeight && "width" !== ab.cssWidthAndHeight || (au.style.height = b.height + "px")) : (ab.cssWidthAndHeight && "height" !== ab.cssWidthAndHeight || (au.style.width = b.width + "px"), ab.cssWidthAndHeight && "width" !== ab.cssWidthAndHeight || (au.style.height = aw + "px"), e = aw + b.wrapperTop + b.wrapperBottom)
				} else {
					if(ab.scrollContainer) {
						au.style.width = "", au.style.height = "", ao = b.slides[0].getWidth(!0, ab.roundLengths), aq = b.slides[0].getHeight(!0, ab.roundLengths), e = l ? ao : aq, au.style.width = ao + "px", au.style.height = aq + "px", d = l ? ao : aq
					} else {
						if(ab.calculateHeight) {
							for(am = 0, aq = 0, l || (b.container.style.height = ""), au.style.height = "", at = 0; at < b.slides.length; at++) {
								b.slides[at].style.height = "", am = Math.max(b.slides[at].getHeight(!0), am), l || (aq += b.slides[at].getHeight(!0))
							}
							aj = am, b.height = aj, l ? aq = aj : (h = aj, b.container.style.height = h + "px")
						} else {
							aj = l ? b.height : b.height / ab.slidesPerView, ab.roundLengths && (aj = Math.ceil(aj)), aq = l ? b.height : b.slides.length * aj
						}
						for(ai = l ? b.width / ab.slidesPerView : b.width, ab.roundLengths && (ai = Math.ceil(ai)), ao = l ? b.slides.length * ai : b.width, d = l ? ai : aj, ab.offsetSlidesBefore > 0 && (l ? b.wrapperLeft = d * ab.offsetSlidesBefore : b.wrapperTop = d * ab.offsetSlidesBefore), ab.offsetSlidesAfter > 0 && (l ? b.wrapperRight = d * ab.offsetSlidesAfter : b.wrapperBottom = d * ab.offsetSlidesAfter), ab.offsetPxBefore > 0 && (l ? b.wrapperLeft = ab.offsetPxBefore : b.wrapperTop = ab.offsetPxBefore), ab.offsetPxAfter > 0 && (l ? b.wrapperRight = ab.offsetPxAfter : b.wrapperBottom = ab.offsetPxAfter), ab.centeredSlides && (l ? (b.wrapperLeft = (h - d) / 2, b.wrapperRight = (h - d) / 2) : (b.wrapperTop = (h - d) / 2, b.wrapperBottom = (h - d) / 2)), l ? (b.wrapperLeft > 0 && (au.style.paddingLeft = b.wrapperLeft + "px"), b.wrapperRight > 0 && (au.style.paddingRight = b.wrapperRight + "px")) : (b.wrapperTop > 0 && (au.style.paddingTop = b.wrapperTop + "px"), b.wrapperBottom > 0 && (au.style.paddingBottom = b.wrapperBottom + "px")), e = l ? ao + b.wrapperRight + b.wrapperLeft : aq + b.wrapperTop + b.wrapperBottom, parseFloat(ao) > 0 && (!ab.cssWidthAndHeight || "height" === ab.cssWidthAndHeight) && (au.style.width = ao + "px"), parseFloat(aq) > 0 && (!ab.cssWidthAndHeight || "width" === ab.cssWidthAndHeight) && (au.style.height = aq + "px"), ar = 0, b.snapGrid = [], b.slidesGrid = [], at = 0; at < b.slides.length; at++) {
							b.snapGrid.push(ar), b.slidesGrid.push(ar), ar += d, parseFloat(ai) > 0 && (!ab.cssWidthAndHeight || "height" === ab.cssWidthAndHeight), parseFloat(aj) > 0 && (!ab.cssWidthAndHeight || "width" === ab.cssWidthAndHeight)
						}
					}
				}
				b.initialized ? (b.callPlugins("onInit"), ab.onInit && b.fireCallback(ab.onInit, b)) : (b.callPlugins("onFirstInit"), ab.onFirstInit && b.fireCallback(ab.onFirstInit, b)), b.initialized = !0
			}
		}, b.reInit = function(ae) {
			b.init(!0, ae)
		}, b.resizeFix = function(ae) {
			b.callPlugins("beforeResizeFix"), b.init(ab.resizeReInit || ae), ab.freeMode ? b.getWrapperTranslate() < -y() && (b.setWrapperTransition(0), b.setWrapperTranslate(-y())) : (b.swipeTo(ab.loop ? b.activeLoopIndex : b.activeIndex, 0, !1), ab.autoplay && (b.support.transitions && "undefined" != typeof W ? "undefined" != typeof W && (clearTimeout(W), W = void 0, b.startAutoplay()) : "undefined" != typeof Z && (clearInterval(Z), Z = void 0, b.startAutoplay()))), b.callPlugins("afterResizeFix")
		}, b.destroy = function(ae) {
			var af = b.h.removeEventListener,
				ag = "wrapper" === ab.eventTarget ? b.wrapper : b.container;
			if(b.browser.ie10 || b.browser.ie11 ? (af(ag, b.touchEvents.touchStart, J), af(document, b.touchEvents.touchMove, K), af(document, b.touchEvents.touchEnd, L)) : (b.support.touch && (af(ag, "touchstart", J), af(ag, "touchmove", K), af(ag, "touchend", L)), ab.simulateTouch && (af(ag, "mousedown", J), af(document, "mousemove", K), af(document, "mouseup", L))), ab.autoResize && af(window, "resize", b.resizeFix), B(), ab.paginationClickable && R(), ab.mousewheelControl && b._wheelEvent && af(b.container, b._wheelEvent, D), ab.keyboardControl && af(document, "keydown", C), ab.autoplay && b.stopAutoplay(), ae) {
				b.wrapper.removeAttribute("style");
				for(var ah = 0; ah < b.slides.length; ah++) {
					b.slides[ah].removeAttribute("style")
				}
			}
			b.callPlugins("onDestroy"), window.jQuery && window.jQuery(b.container).data("swiper") && window.jQuery(b.container).removeData("swiper"), window.Zepto && window.Zepto(b.container).data("swiper") && window.Zepto(b.container).removeData("swiper"), b = null
		}, b.disableKeyboardControl = function() {
			ab.keyboardControl = !1, b.h.removeEventListener(document, "keydown", C)
		}, b.enableKeyboardControl = function() {
			ab.keyboardControl = !0, b.h.addEventListener(document, "keydown", C)
		};
		var t = (new Date).getTime();
		if(b.disableMousewheelControl = function() {
				return b._wheelEvent ? (ab.mousewheelControl = !1, b.h.removeEventListener(b.container, b._wheelEvent, D), !0) : !1
			}, b.enableMousewheelControl = function() {
				return b._wheelEvent ? (ab.mousewheelControl = !0, b.h.addEventListener(b.container, b._wheelEvent, D), !0) : !1
			}, ab.grabCursor) {
			var u = b.container.style;
			u.cursor = "move", u.cursor = "grab", u.cursor = "-moz-grab", u.cursor = "-webkit-grab"
		}
		b.allowSlideClick = !0, b.allowLinks = !0;
		var v, w, x, U = !1,
			Y = !0;
		b.swipeNext = function(ae, af) {
			"undefined" == typeof ae && (ae = !0), !af && ab.loop && b.fixLoop(), !af && ab.autoplay && b.stopAutoplay(!0), b.callPlugins("onSwipeNext");
			var ag = b.getWrapperTranslate().toFixed(2),
				ah = ag;
			if("auto" === ab.slidesPerView) {
				for(var ai = 0; ai < b.snapGrid.length; ai++) {
					if(-ag >= b.snapGrid[ai].toFixed(2) && -ag < b.snapGrid[ai + 1].toFixed(2)) {
						ah = -b.snapGrid[ai + 1];
						break
					}
				}
			} else {
				var aj = d * ab.slidesPerGroup;
				ah = -(Math.floor(Math.abs(ag) / Math.floor(aj)) * aj + aj)
			}
			return ah < -y() && (ah = -y()), ah === ag ? !1 : (P(ah, "next", {
				runCallbacks: ae
			}), !0)
		}, b.swipePrev = function(ae, af) {
			"undefined" == typeof ae && (ae = !0), !af && ab.loop && b.fixLoop(), !af && ab.autoplay && b.stopAutoplay(!0), b.callPlugins("onSwipePrev");
			var ag, ah = Math.ceil(b.getWrapperTranslate());
			if("auto" === ab.slidesPerView) {
				ag = 0;
				for(var ai = 1; ai < b.snapGrid.length; ai++) {
					if(-ah === b.snapGrid[ai]) {
						ag = -b.snapGrid[ai - 1];
						break
					}
					if(-ah > b.snapGrid[ai] && -ah < b.snapGrid[ai + 1]) {
						ag = -b.snapGrid[ai];
						break
					}
				}
			} else {
				var aj = d * ab.slidesPerGroup;
				ag = -(Math.ceil(-ah / aj) - 1) * aj
			}
			return ag > 0 && (ag = 0), ag === ah ? !1 : (P(ag, "prev", {
				runCallbacks: ae
			}), !0)
		}, b.swipeReset = function(ae) {
			"undefined" == typeof ae && (ae = !0), b.callPlugins("onSwipeReset");
			var af, ag = b.getWrapperTranslate(),
				ah = d * ab.slidesPerGroup; - y();
			if("auto" === ab.slidesPerView) {
				af = 0;
				for(var ai = 0; ai < b.snapGrid.length; ai++) {
					if(-ag === b.snapGrid[ai]) {
						return
					}
					if(-ag >= b.snapGrid[ai] && -ag < b.snapGrid[ai + 1]) {
						af = b.positions.diff > 0 ? -b.snapGrid[ai + 1] : -b.snapGrid[ai];
						break
					}
				} - ag >= b.snapGrid[b.snapGrid.length - 1] && (af = -b.snapGrid[b.snapGrid.length - 1]), ag <= -y() && (af = -y())
			} else {
				af = 0 > ag ? Math.round(ag / ah) * ah : 0, ag <= -y() && (af = -y())
			}
			return ab.scrollContainer && (af = 0 > ag ? ag : 0), af < -y() && (af = -y()), ab.scrollContainer && h > d && (af = 0), af === ag ? !1 : (P(af, "reset", {
				runCallbacks: ae
			}), !0)
		}, b.swipeTo = function(ae, af, ag) {
			ae = parseInt(ae, 10), b.callPlugins("onSwipeTo", {
				index: ae,
				speed: af
			}), ab.loop && (ae += b.loopedSlides);
			var ah = b.getWrapperTranslate();
			if(!(!isFinite(ae) || ae > b.slides.length - 1 || 0 > ae)) {
				var ai;
				return ai = "auto" === ab.slidesPerView ? -b.slidesGrid[ae] : -ae * d, ai < -y() && (ai = -y()), ai === ah ? !1 : ("undefined" == typeof ag && (ag = !0), P(ai, "to", {
					index: ae,
					speed: af,
					runCallbacks: ag
				}), !0)
			}
		}, b._queueStartCallbacks = !1, b._queueEndCallbacks = !1, b.updateActiveSlide = function(af) {
			if(b.initialized && 0 !== b.slides.length) {
				b.previousIndex = b.activeIndex, "undefined" == typeof af && (af = b.getWrapperTranslate()), af > 0 && (af = 0);
				var aj;
				if("auto" === ab.slidesPerView) {
					if(b.activeIndex = b.slidesGrid.indexOf(-af), b.activeIndex < 0) {
						for(aj = 0; aj < b.slidesGrid.length - 1 && !(-af > b.slidesGrid[aj] && -af < b.slidesGrid[aj + 1]); aj++) {}
						var ak = Math.abs(b.slidesGrid[aj] + af),
							al = Math.abs(b.slidesGrid[aj + 1] + af);
						b.activeIndex = al >= ak ? aj : aj + 1
					}
				} else {
					b.activeIndex = Math[ab.visibilityFullFit ? "ceil" : "round"](-af / d)
				}
				if(b.activeIndex === b.slides.length && (b.activeIndex = b.slides.length - 1), b.activeIndex < 0 && (b.activeIndex = 0), b.slides[b.activeIndex]) {
					if(b.calcVisibleSlides(af), b.support.classList) {
						var ae;
						for(aj = 0; aj < b.slides.length; aj++) {
							ae = b.slides[aj], ae.classList.remove(ab.slideActiveClass), b.visibleSlides.indexOf(ae) >= 0 ? ae.classList.add(ab.slideVisibleClass) : ae.classList.remove(ab.slideVisibleClass)
						}
						b.slides[b.activeIndex].classList.add(ab.slideActiveClass)
					} else {
						var ag = new RegExp("\\s*" + ab.slideActiveClass),
							ah = new RegExp("\\s*" + ab.slideVisibleClass);
						for(aj = 0; aj < b.slides.length; aj++) {
							b.slides[aj].className = b.slides[aj].className.replace(ag, "").replace(ah, ""), b.visibleSlides.indexOf(b.slides[aj]) >= 0 && (b.slides[aj].className += " " + ab.slideVisibleClass)
						}
						b.slides[b.activeIndex].className += " " + ab.slideActiveClass
					}
					if(ab.loop) {
						var ai = b.loopedSlides;
						b.activeLoopIndex = b.activeIndex - ai, b.activeLoopIndex >= b.slides.length - 2 * ai && (b.activeLoopIndex = b.slides.length - 2 * ai - b.activeLoopIndex), b.activeLoopIndex < 0 && (b.activeLoopIndex = b.slides.length - 2 * ai + b.activeLoopIndex), b.activeLoopIndex < 0 && (b.activeLoopIndex = 0)
					} else {
						b.activeLoopIndex = b.activeIndex
					}
					ab.pagination && b.updatePagination(af)
				}
			}
		}, b.createPagination = function(ae) {
			if(ab.paginationClickable && b.paginationButtons && R(), b.paginationContainer = ab.pagination.nodeType ? ab.pagination : ac(ab.pagination)[0], ab.createPagination) {
				var af = "",
					ag = b.slides.length,
					ah = ag;
				ab.loop && (ah -= 2 * b.loopedSlides);
				for(var ai = 0; ah > ai; ai++) {
					af += "<" + ab.paginationElement + ' class="' + ab.paginationElementClass + '"></' + ab.paginationElement + ">"
				}
				b.paginationContainer.innerHTML = af
			}
			b.paginationButtons = ac("." + ab.paginationElementClass, b.paginationContainer), ae || b.updatePagination(), b.callPlugins("onCreatePagination"), ab.paginationClickable && S()
		}, b.updatePagination = function(af) {
			if(ab.pagination && !(b.slides.length < 1)) {
				var ai = ac("." + ab.paginationActiveClass, b.paginationContainer);
				if(ai) {
					var aj = b.paginationButtons;
					if(0 !== aj.length) {
						for(var al = 0; al < aj.length; al++) {
							aj[al].className = ab.paginationElementClass
						}
						var ae = ab.loop ? b.loopedSlides : 0;
						if(ab.paginationAsRange) {
							b.visibleSlides || b.calcVisibleSlides(af);
							var ag, ah = [];
							for(ag = 0; ag < b.visibleSlides.length; ag++) {
								var ak = b.slides.indexOf(b.visibleSlides[ag]) - ae;
								ab.loop && 0 > ak && (ak = b.slides.length - 2 * b.loopedSlides + ak), ab.loop && ak >= b.slides.length - 2 * b.loopedSlides && (ak = b.slides.length - 2 * b.loopedSlides - ak, ak = Math.abs(ak)), ah.push(ak)
							}
							for(ag = 0; ag < ah.length; ag++) {
								aj[ah[ag]] && (aj[ah[ag]].className += " " + ab.paginationVisibleClass)
							}
							ab.loop ? void 0 !== aj[b.activeLoopIndex] && (aj[b.activeLoopIndex].className += " " + ab.paginationActiveClass) : aj[b.activeIndex] && (aj[b.activeIndex].className += " " + ab.paginationActiveClass)
						} else {
							ab.loop ? aj[b.activeLoopIndex] && (aj[b.activeLoopIndex].className += " " + ab.paginationActiveClass + " " + ab.paginationVisibleClass) : aj[b.activeIndex] && (aj[b.activeIndex].className += " " + ab.paginationActiveClass + " " + ab.paginationVisibleClass)
						}
					}
				}
			}
		}, b.calcVisibleSlides = function(af) {
			var ak = [],
				ae = 0,
				ag = 0,
				ah = 0;
			l && b.wrapperLeft > 0 && (af += b.wrapperLeft), !l && b.wrapperTop > 0 && (af += b.wrapperTop);
			for(var ai = 0; ai < b.slides.length; ai++) {
				ae += ag, ag = "auto" === ab.slidesPerView ? l ? b.h.getWidth(b.slides[ai], !0, ab.roundLengths) : b.h.getHeight(b.slides[ai], !0, ab.roundLengths) : d, ah = ae + ag;
				var aj = !1;
				ab.visibilityFullFit ? (ae >= -af && -af + h >= ah && (aj = !0), -af >= ae && ah >= -af + h && (aj = !0)) : (ah > -af && -af + h >= ah && (aj = !0), ae >= -af && -af + h > ae && (aj = !0), -af > ae && ah > -af + h && (aj = !0)), aj && ak.push(b.slides[ai])
			}
			0 === ak.length && (ak = [b.slides[b.activeIndex]]), b.visibleSlides = ak
		};
		var W, Z;
		b.startAutoplay = function() {
			if(b.support.transitions) {
				if("undefined" != typeof W) {
					return !1
				}
				if(!ab.autoplay) {
					return
				}
				b.callPlugins("onAutoplayStart"), ab.onAutoplayStart && b.fireCallback(ab.onAutoplayStart, b), V()
			} else {
				if("undefined" != typeof Z) {
					return !1
				}
				if(!ab.autoplay) {
					return
				}
				b.callPlugins("onAutoplayStart"), ab.onAutoplayStart && b.fireCallback(ab.onAutoplayStart, b), Z = setInterval(function() {
					ab.loop ? (b.fixLoop(), b.swipeNext(!0, !0)) : b.swipeNext(!0, !0) || (ab.autoplayStopOnLast ? (clearInterval(Z), Z = void 0) : b.swipeTo(0))
				}, ab.autoplay)
			}
		}, b.stopAutoplay = function(ae) {
			if(b.support.transitions) {
				if(!W) {
					return
				}
				W && clearTimeout(W), W = void 0, ae && !ab.autoplayDisableOnInteraction && b.wrapperTransitionEnd(function() {
					V()
				}), b.callPlugins("onAutoplayStop"), ab.onAutoplayStop && b.fireCallback(ab.onAutoplayStop, b)
			} else {
				Z && clearInterval(Z), Z = void 0, b.callPlugins("onAutoplayStop"), ab.onAutoplayStop && b.fireCallback(ab.onAutoplayStop, b)
			}
		}, b.loopCreated = !1, b.removeLoopedSlides = function() {
			if(b.loopCreated) {
				for(var ae = 0; ae < b.slides.length; ae++) {
					b.slides[ae].getData("looped") === !0 && b.wrapper.removeChild(b.slides[ae])
				}
			}
		}, b.createLoop = function() {
			if(0 !== b.slides.length) {
				b.loopedSlides = "auto" === ab.slidesPerView ? ab.loopedSlides || 1 : Math.floor(ab.slidesPerView) + ab.loopAdditionalSlides, b.loopedSlides > b.slides.length && (b.loopedSlides = b.slides.length);
				var am, an = "",
					ae = "",
					af = "",
					ag = b.slides.length,
					ah = Math.floor(b.loopedSlides / ag),
					ai = b.loopedSlides % ag;
				for(am = 0; ah * ag > am; am++) {
					var aj = am;
					if(am >= ag) {
						var ak = Math.floor(am / ag);
						aj = am - ag * ak
					}
					af += b.slides[aj].outerHTML
				}
				for(am = 0; ai > am; am++) {
					ae += O(ab.slideDuplicateClass, b.slides[am].outerHTML)
				}
				for(am = ag - ai; ag > am; am++) {
					an += O(ab.slideDuplicateClass, b.slides[am].outerHTML)
				}
				var al = an + af + c.innerHTML + af + ae;
				for(c.innerHTML = al, b.loopCreated = !0, b.calcSlides(), am = 0; am < b.slides.length; am++) {
					(am < b.loopedSlides || am >= b.slides.length - b.loopedSlides) && b.slides[am].setData("looped", !0)
				}
				b.callPlugins("onCreateLoop")
			}
		}, b.fixLoop = function() {
			var ae;
			b.activeIndex < b.loopedSlides ? (ae = b.slides.length - 3 * b.loopedSlides + b.activeIndex, b.swipeTo(ae, 0, !1)) : ("auto" === ab.slidesPerView && b.activeIndex >= 2 * b.loopedSlides || b.activeIndex > b.slides.length - 2 * ab.slidesPerView) && (ae = -b.slides.length + b.activeIndex + b.loopedSlides, b.swipeTo(ae, 0, !1))
		}, b.loadSlides = function() {
			var ae = "";
			b.activeLoaderIndex = 0;
			for(var af = ab.loader.slides, ag = ab.loader.loadAllSlides ? af.length : ab.slidesPerView * (1 + ab.loader.surroundGroups), ah = 0; ag > ah; ah++) {
				ae += "outer" === ab.loader.slidesHTMLType ? af[ah] : "<" + ab.slideElement + ' class="' + ab.slideClass + '" data-swiperindex="' + ah + '">' + af[ah] + "</" + ab.slideElement + ">"
			}
			b.wrapper.innerHTML = ae, b.calcSlides(!0), ab.loader.loadAllSlides || b.wrapperTransitionEnd(b.reloadSlides, !0)
		}, b.reloadSlides = function() {
			var al = ab.loader.slides,
				am = parseInt(b.activeSlide().data("swiperindex"), 10);
			if(!(0 > am || am > al.length - 1)) {
				b.activeLoaderIndex = am;
				var an = Math.max(0, am - ab.slidesPerView * ab.loader.surroundGroups),
					ao = Math.min(am + ab.slidesPerView * (1 + ab.loader.surroundGroups) - 1, al.length - 1);
				if(am > 0) {
					var ae = -d * (am - an);
					b.setWrapperTranslate(ae), b.setWrapperTransition(0)
				}
				var af;
				if("reload" === ab.loader.logic) {
					b.wrapper.innerHTML = "";
					var ag = "";
					for(af = an; ao >= af; af++) {
						ag += "outer" === ab.loader.slidesHTMLType ? al[af] : "<" + ab.slideElement + ' class="' + ab.slideClass + '" data-swiperindex="' + af + '">' + al[af] + "</" + ab.slideElement + ">"
					}
					b.wrapper.innerHTML = ag
				} else {
					var ah = 1e3,
						ai = 0;
					for(af = 0; af < b.slides.length; af++) {
						var aj = b.slides[af].data("swiperindex");
						an > aj || aj > ao ? b.wrapper.removeChild(b.slides[af]) : (ah = Math.min(aj, ah), ai = Math.max(aj, ai))
					}
					for(af = an; ao >= af; af++) {
						var ak;
						ah > af && (ak = document.createElement(ab.slideElement), ak.className = ab.slideClass, ak.setAttribute("data-swiperindex", af), ak.innerHTML = al[af], b.wrapper.insertBefore(ak, b.wrapper.firstChild)), af > ai && (ak = document.createElement(ab.slideElement), ak.className = ab.slideClass, ak.setAttribute("data-swiperindex", af), ak.innerHTML = al[af], b.wrapper.appendChild(ak))
					}
				}
				b.reInit(!0)
			}
		}, X()
	}
};
Swiper.prototype = {
	plugins: {},
	wrapperTransitionEnd: function(e, f) {
		function g(h) {
			if(h.target === c && (e(b), b.params.queueEndCallbacks && (b._queueEndCallbacks = !1), !f)) {
				for(a = 0; a < d.length; a++) {
					b.h.removeEventListener(c, d[a], g)
				}
			}
		}
		var a, b = this,
			c = b.wrapper,
			d = ["webkitTransitionEnd", "transitionend", "oTransitionEnd", "MSTransitionEnd", "msTransitionEnd"];
		if(e) {
			for(a = 0; a < d.length; a++) {
				b.h.addEventListener(c, d[a], g)
			}
		}
	},
	getWrapperTranslate: function(e) {
		var f, a, b, c, d = this.wrapper;
		return "undefined" == typeof e && (e = "horizontal" === this.params.mode ? "x" : "y"), this.support.transforms && this.params.useCSS3Transforms ? (b = window.getComputedStyle(d, null), window.WebKitCSSMatrix ? c = new WebKitCSSMatrix("none" === b.webkitTransform ? "" : b.webkitTransform) : (c = b.MozTransform || b.OTransform || b.MsTransform || b.msTransform || b.transform || b.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,"), f = c.toString().split(",")), "x" === e && (a = window.WebKitCSSMatrix ? c.m41 : parseFloat(16 === f.length ? f[12] : f[4])), "y" === e && (a = window.WebKitCSSMatrix ? c.m42 : parseFloat(16 === f.length ? f[13] : f[5]))) : ("x" === e && (a = parseFloat(d.style.left, 10) || 0), "y" === e && (a = parseFloat(d.style.top, 10) || 0)), a || 0
	},
	setWrapperTranslate: function(f, n, a) {
		var o = $("#" + this.container.id).find(".swiper-wrapper").width(),
			e = $("#" + this.container.id).width();
		var b, c = this.wrapper.style,
			d = {
				x: 0,
				y: 0,
				z: 0
			};
		3 === arguments.length ? (d.x = f, d.y = n, d.z = a) : ("undefined" == typeof n && (n = "horizontal" === this.params.mode ? "x" : "y"), d[n] = f), this.support.transforms && this.params.useCSS3Transforms ? (b = this.support.transforms3d ? "translate3d(" + d.x + "px, " + d.y + "px, " + d.z + "px)" : "translate(" + d.x + "px, " + d.y + "px)", c.webkitTransform = c.MsTransform = c.msTransform = c.MozTransform = c.OTransform = c.transform = b) : (c.left = d.x + "px", c.top = d.y + "px"), this.callPlugins("onSetWrapperTransform", d), this.params.onSetWrapperTransform && this.fireCallback(this.params.onSetWrapperTransform, this, d);
		if(Math.abs(f) == 0) {
			$("#" + this.container.id).parent().find("." + this.params.btnPrefix + "-prev").addClass("disabled")
		} else {
			$("#" + this.container.id).parent().find("." + this.params.btnPrefix + "-prev").removeClass("disabled")
		}
		if(o - Math.ceil(-f) <= e) {
			$("#" + this.container.id).parent().find("." + this.params.btnPrefix + "-next").addClass("disabled")
		} else {
			$("#" + this.container.id).parent().find("." + this.params.btnPrefix + "-next").removeClass("disabled")
		}
	},
	setWrapperTransition: function(a) {
		var b = this.wrapper.style;
		b.webkitTransitionDuration = b.MsTransitionDuration = b.msTransitionDuration = b.MozTransitionDuration = b.OTransitionDuration = b.transitionDuration = a / 1e3 + "s", this.callPlugins("onSetWrapperTransition", {
			duration: a
		}), this.params.onSetWrapperTransition && this.fireCallback(this.params.onSetWrapperTransition, this, a)
	},
	h: {
		getWidth: function(d, e, a) {
			var b = window.getComputedStyle(d, null).getPropertyValue("width"),
				c = parseFloat(b);
			return(isNaN(c) || b.indexOf("%") > 0 || 0 > c) && (c = d.offsetWidth - parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-left")) - parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-right"))), e && (c += parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-left")) + parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-right"))), a ? Math.ceil(c) : c
		},
		getHeight: function(d, e, a) {
			if(e) {
				return d.offsetHeight
			}
			var b = window.getComputedStyle(d, null).getPropertyValue("height"),
				c = parseFloat(b);
			return(isNaN(c) || b.indexOf("%") > 0 || 0 > c) && (c = d.offsetHeight - parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-top")) - parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-bottom"))), e && (c += parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-top")) + parseFloat(window.getComputedStyle(d, null).getPropertyValue("padding-bottom"))), a ? Math.ceil(c) : c
		},
		getOffset: function(e) {
			var f = e.getBoundingClientRect(),
				g = document.body,
				a = e.clientTop || g.clientTop || 0,
				b = e.clientLeft || g.clientLeft || 0,
				c = window.pageYOffset || e.scrollTop,
				d = window.pageXOffset || e.scrollLeft;
			return document.documentElement && !window.pageYOffset && (c = document.documentElement.scrollTop, d = document.documentElement.scrollLeft), {
				top: f.top + c - a,
				left: f.left + d - b
			}
		},
		windowWidth: function() {
			return window.innerWidth ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : void 0
		},
		windowHeight: function() {
			return window.innerHeight ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : void 0
		},
		windowScroll: function() {
			return "undefined" != typeof pageYOffset ? {
				left: window.pageXOffset,
				top: window.pageYOffset
			} : document.documentElement ? {
				left: document.documentElement.scrollLeft,
				top: document.documentElement.scrollTop
			} : void 0
		},
		addEventListener: function(c, d, a, b) {
			"undefined" == typeof b && (b = !1), c.addEventListener ? c.addEventListener(d, a, b) : c.attachEvent && c.attachEvent("on" + d, a)
		},
		removeEventListener: function(c, d, a, b) {
			"undefined" == typeof b && (b = !1), c.removeEventListener ? c.removeEventListener(d, a, b) : c.detachEvent && c.detachEvent("on" + d, a)
		}
	},
	setTransform: function(b, c) {
		var a = b.style;
		a.webkitTransform = a.MsTransform = a.msTransform = a.MozTransform = a.OTransform = a.transform = c
	},
	setTranslate: function(d, e) {
		var a = d.style,
			b = {
				x: e.x || 0,
				y: e.y || 0,
				z: e.z || 0
			},
			c = this.support.transforms3d ? "translate3d(" + b.x + "px," + b.y + "px," + b.z + "px)" : "translate(" + b.x + "px," + b.y + "px)";
		a.webkitTransform = a.MsTransform = a.msTransform = a.MozTransform = a.OTransform = a.transform = c, this.support.transforms || (a.left = b.x + "px", a.top = b.y + "px")
	},
	setTransition: function(b, c) {
		var a = b.style;
		a.webkitTransitionDuration = a.MsTransitionDuration = a.msTransitionDuration = a.MozTransitionDuration = a.OTransitionDuration = a.transitionDuration = c + "ms"
	},
	support: {
		touch: window.Modernizr && Modernizr.touch === !0 || function() {
			return !!("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch)
		}(),
		transforms3d: window.Modernizr && Modernizr.csstransforms3d === !0 || function() {
			var a = document.createElement("div").style;
			return "webkitPerspective" in a || "MozPerspective" in a || "OPerspective" in a || "MsPerspective" in a || "perspective" in a
		}(),
		transforms: window.Modernizr && Modernizr.csstransforms === !0 || function() {
			var a = document.createElement("div").style;
			return "transform" in a || "WebkitTransform" in a || "MozTransform" in a || "msTransform" in a || "MsTransform" in a || "OTransform" in a
		}(),
		transitions: window.Modernizr && Modernizr.csstransitions === !0 || function() {
			var a = document.createElement("div").style;
			return "transition" in a || "WebkitTransition" in a || "MozTransition" in a || "msTransition" in a || "MsTransition" in a || "OTransition" in a
		}(),
		classList: function() {
			var a = document.createElement("div");
			return "classList" in a
		}()
	},
	browser: {
		ie8: function() {
			var b = -1;
			if("Microsoft Internet Explorer" === navigator.appName) {
				var c = navigator.userAgent,
					a = new RegExp(/MSIE ([0-9]{1,}[\.0-9]{0,})/);
				null !== a.exec(c) && (b = parseFloat(RegExp.$1))
			}
			return -1 !== b && 9 > b
		}(),
		ie10: window.navigator.msPointerEnabled,
		ie11: window.navigator.pointerEnabled
	}
}, (window.jQuery || window.Zepto) && ! function(a) {
	a.fn.swiper = function(b) {
		var c;
		return this.each(function(d) {
			var e = a(this),
				f = new Swiper(e[0], b);
			d || (c = f), e.data("swiper", f)
		}), c
	}
}(window.jQuery || window.Zepto), "undefined" != typeof module ? module.exports = Swiper : "function" == typeof define && define.amd && define([], function() {
	return Swiper
}); /*html*/
/*
jQuery.prototype.s_html=jQuery.prototype.html;
jQuery.prototype.html=function(value){
	
    if(typeof(value) != "undefined" && typeof(value)=="string")
	{
	    value = filterXSS(value);
	}
	else if(typeof(value) == "undefined")
	{
		return this.s_html();
	}
	
return this.s_html(value);
}*?
/*append*/
/*
jQuery.prototype.s_append =jQuery.prototype.append;
jQuery.prototype.append= function(value){ 
	if(typeof value != "undefined" && typeof(value)=="string")
	{
		value = filterXSS(value);
	}
 return this.s_append(value);
}*/
/*appendTo*/
/*
jQuery.prototype.s_appendTo =jQuery.prototype.appendTo;
jQuery.prototype.appendTo=function(value){
	if(typeof value === undefined || value === '')
		return ;
	
    var result ;
//for(var i = 0; i < this.length;i ++)
	//{
      return  this.s_appendTo(value);
	//}
// return result;
}
*/
/**
è¿‡æ»¤æ ¡éªŒ
*/
function filterXSS(input) {
	var parseObject = jQuery.parseHTML(input, true);

	var returnHtml = resolveNode(parseObject);
	var result = "";
	for(var i = 0; i < returnHtml.length; i++) {
		if(returnHtml[i].nodeType == 1) {
			result = result + returnHtml[i].outerHTML;
		} else if(returnHtml[i].nodeType == 3) {
			result = result + returnHtml[i].nodeValue;
		}
	}
	if(result.indexOf("&amp;") > 0) {
		var tmp = document.createElement("textarea");
		tmp.innerHTML = result;
		result = tmp.value;
	}
	//printLog(result);
	return result;
}

function resolveNode(domObj) {
	var newNodeList = [];
	var attrWhiteList;
	var cNode = [];
	var aNode;
	for(var i = 0; i < domObj.length; i++) {
		if(domObj[i].nodeType == 1) {
			if(!parseTag(domObj[i])) {
				printLog("ignore tag:" + domObj[i]);
				continue;
			}

			aNode = parseAttr(domObj[i]);

			cNode = resolveNode(aNode.childNodes);
			aNode.innerHTML = "";

			for(var j = 0; j < cNode.length; j++) {
				aNode.append(cNode[j]);
			}
			if(newNodeList == null || newNodeList == undefined)
				newNodeList.push(aNode);
			else
				newNodeList.push(aNode);
		} else if(domObj[i].nodeType == 3) {
			domObj[i].nodeValue = parseText(domObj[i].nodeValue)
			//newNodeList = newNodeList + domObj[i].nodeValue;
			if(newNodeList == null || newNodeList == undefined)
				newNodeList.push(domObj[i]);
			else
				newNodeList.push(domObj[i]);
		}
	}
	return newNodeList;
}

function parseTag(inputTag) {
	var outTag = "";
	var whiteList = getTagWhiteList();
	var attrList = whiteList[inputTag.tagName.toLowerCase()];
	if(attrList == undefined) {
		printLog("ignore node:" + inputTag.tagName);
		return false;
	}

	return true;
}

function parseAttr(node) {
	var inputTag = node.tagName;
	var inputAttrs = node.attributes;
	//var tagNode =document.getElementsByTagName(inputTag)[0];
	var attrs;
	var whiteList = getTagWhiteList();
	var wAttrList = whiteList[inputTag.toLowerCase()]; //tagå·²ç»æ ¡éªŒè¿‡

	var eventList = [];
	var newAttr = null;
	var newValue = "";

	for(var j = 0; j < inputAttrs.length; j++) {
		if(wAttrList.contains(inputAttrs[0].nodeName.toLowerCase()) || inputAttrs[0].nodeName.toLowerCase().substr(0, 5) === "data-") {
			if(getEventAttrList().contains(inputAttrs[0].nodeName.toLowerCase())) {
				newValue = clickEvent(inputAttrs[0].value);
			} else if(inputAttrs[0].nodeName.toLowerCase() == "href") {
				newValue = attrHref(inputAttrs[0].value);
			} else if(inputAttrs[0].nodeName.toLowerCase() == "src") {
				newValue = attrSrc(inputAttrs[0].value);
			} else if(inputAttrs[0].nodeName.toLowerCase() == "style") {
				newValue = attrStyle(inputAttrs[0].value)
			} else {
				newValue = attrOther(inputAttrs[0].value);
			}
			newAttr = document.createAttribute(inputAttrs[0].nodeName);

			newAttr.nodeValue = newValue;
		} else //remove
		{
			printLog("tag-" + inputTag + ";remove attr:" + inputAttrs[0].nodeName);
		}

		node.attributes.removeNamedItem(inputAttrs[0].nodeName)
		if(newAttr != null) {
			node.attributes.setNamedItem(newAttr);
		}
		newAttr = null;
	}

	return node;

}

function parseText(inputText) {
	return ec.encodeForAttr(inputText);
}

function clickEvent(inputVal) {
	var value = safeEventVal(inputVal);
	return value;
}

function attrStyle(value) {
	if(REGEXP_EXPRESSION_ON_TAG_ATTR.test(value)) {
		printLog("forbidden:" + value);
		return "";
	}

	var styles = "";
	var key_val = "";
	var styleAttr = value.split(";");
	var func;
	var styleAttrName = "";
	if(styleAttr.length <= 0) return "";

	var styleWhiteList = getStyleWhiteList();
	for(var i = 0; i < styleAttr.length; i++) {
		if(styleAttr[i].trim() == "")
			continue;

		key_val = styleAttr[i].split(":");
		styleAttrName = key_val[0].trim();

		func = styleWhiteList[styleAttrName];
		if(key_val.length <= 1 && func == true) {
			styles = styles + key_val[0] + ";"
			continue;
		} else if(key_val.length > 1 && func == true) {

			styles = styles + key_val[0] + ":" + ec.encodeForAttr(key_val[1]) + ";"
		} else if(key_val.length > 1 & typeof(func) == "function") {
			if(func(key_val[1])) {
				styles = styles + key_val[0] + ":" + ec.encodeForAttr(key_val[1]) + ";"
			}
		}
	}
	return styles;
}

function attrHref(value) {
	//åŸŸåç™½åå•æ ¡éªŒ
	// filter `href` and `src` attribute
	// only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`
	value = value.trim();
	if(value === "javascript:;" || value === "javascript:void(0);" ||
		value === "javascript:void(0)" || value === "#" || value === "") {
		return value;
	} else if(value.substr(0, 7) === "http://" || value.substr(0, 8) === "https://") { //ä¸åœ¨ç™½åå•èŒƒå›´å†…çš„å†…å®¹ç›´æŽ¥è¿”å›žå›ºå®šå­—ç¬¦ä¸²ï¼Œä¸åšä»»ä½•ç‚¹å‡»å“åº”
		var whiteDomain = getDomainWhiteList();
		for(var i = 0; i < whiteDomain.length; i++) {
			if(value.substr(0, whiteDomain[i].length) === whiteDomain[i]) {
				if(REGEXP_HREF_ATTR.test(value))
					return ec.encodeForAttr(value);
				else {
					printLog("ignore href:" + value);
					return "";
				}
			}
		}
		printLog("error domain:" + value);
		return "";
	} else if(value.substr(0, 7) === "mailto:") {
		if(!REGEXP_EMAIL.test(value.substr(8))) {
			printLog("error mail:" + value);
			return "";
		}
		return ec.encodeForAttr(value);
	} else if(value.substr(0, 4) === "tel:") {
		if(!REGEXP_PHONE.test(value.substr(5))) {
			printLog("error phone:" + value);
			return "";
		}
		return ec.encodeForAttr(value);
	} else if(REGEXP_HREF_ON_DOMAIN_ATTR.test(value)) {
		return ec.encodeForAttr(value);
	} else {
		printLog("error href:" + value);
		return "";
	}
}

function attrSrc(value) {
	//åŸŸåç™½åå•æ ¡éªŒ
	// filter `href` and `src` attribute
	// only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`
	value = value.trim();
	if(value == 'undefined' || value == "") {
		return "";
	}

	if(value.substr(0, 7) === "http://" || value.substr(0, 8) === "https://") { //ä¸åœ¨ç™½åå•èŒƒå›´å†…çš„å†…å®¹ç›´æŽ¥è¿”å›žå›ºå®šå­—ç¬¦ä¸²ï¼Œä¸åšä»»ä½•ç‚¹å‡»å“åº”
		var whiteDomain = getDomainWhiteList();
		for(var i = 0; i < whiteDomain.length; i++) {
			if(value.substr(0, whiteDomain[i].length) === whiteDomain[i]) {
				if(REGEXP_HREF_ATTR.test(value))
					return ec.encodeForAttr(value);
				else {
					printLog("error URL:" + value);
					return "";
				}
			}
		}
		printLog("error domain:" + value);
		return "";
	} else if(REGEXP_HREF_ON_DOMAIN_ATTR.test(value)) {
		return ec.encodeForAttr(value);
	} else {
		printLog("error src:" + value);
		return "";
	}
}

function attrOther(inputVal) {
	return ec.encodeForAttr(inputVal);
}

/**
 *äº‹ä»¶å®‰å…¨è¿‡æ»¤
 */
function safeEventVal(input) {
	var value = "";
	var paramStr = "";
	var backWord = "";
	var frontWord = "";
	var result = "";
	var funcs = input.split(";");
	for(var f = 0; f < funcs.length; f++) {
		value = funcs[f];

		if(value == "return false") {
			result = result + value + ";";
			continue;
		} else if(value == "") {
			continue;
		}
		if(!REGEXP_ONCLICK.test(value)) { //åªæ”¯æŒmethod(****,****);å½¢å¼çš„å‡½æ•°
			printLog("error event:" + value);
			continue;
		}

		paramStr = "";
		backWord = "";
		frontWord = value.substring(0, (value.indexOf("(") + 1));
		if(value.substring((value.length - 2)) === ");") {
			var paramStr = value.substring(value.indexOf("(") + 1, (value.length - 2));
			backWord = ");";
		} else if(value.substring((value.length - 1)) === ")") {
			paramStr = value.substring(value.indexOf("(") + 1, (value.length - 1));
			backWord = ")";
		}

		var params = paramStr.split(",");
		var temp = "";
		var returnWord = "";
		for(var i = 0; i < params.length; i++) {
			params[i] = params[i].trim();
			if((params[i].indexOf("'") === 0 && params[i].substring(params[i].length - 1) === "'")) //å•å¼•å·
			{
				temp = ec.encodeForJS(params[i].substring(1, params[i].length - 1));
				returnWord === "" ? (returnWord = "'" + temp + "'") : (returnWord = returnWord + ",'" + temp + "'");
			} else if((params[i].indexOf("\"") === 0 && params[i].substring(params[i].length - 1) === "\"")) //åŒå¼•å·
			{
				temp = ec.encodeForJS(params[i].substring(1, params[i].length - 1));
				returnWord === "" ? (returnWord = "\"" + temp + "\"") : (returnWord = returnWord + ",\"" + temp + "\"");
			} else if(REGEXP_WORD_NUMBER.test(params[i]) || params[i] == "") {
				returnWord === "" ? (returnWord = params[i]) : (returnWord = returnWord + "," + params[i]);
				continue; //çº¯æ•°å­—æˆ–è€…å­—æ¯ä¸åšä»»ä½•å¤„ç†,å¯èƒ½ä¸ºthisã€nullã€trueã€falseã€æ•°å­—ç­‰
			} else {
				printLog("remove event:" + input);
			}
		}

		value = frontWord + returnWord + backWord;
		result = result + value + ";";
	}
	return result;
}

function getEventAttrList() {

	eventList = ["onclick", "ondblclick", "ondrag", "onmouseover", "onmousedown", "onmouseout", "onkeyup", "onkeypress", "onload"]
	return eventList;
}

function getDomainWhiteList() {
	return ["https://www.vmall.com/", "https://m.vmall.com/", "https://mw.vmall.com/", "https://res0.vmallres.com/", "https://res1.vmallres.com/", "https://res2.vmallres.com/", "https://res3.vmallres.com/", "https://res4.vmallres.com/", "https://res5.vmallres.com/", "https://res6.vmallres.com/", "https://res7.vmallres.com/", "https://res8.vmallres.com/", "https://res9.vmallres.com/", "https://res10.vmallres.com/", "https://res.vmallres.com/", "https://consumer.huawei.com/cn/", "https://sr.aihuishou.com/", dapDomain, salevmall];
}

function getTagWhiteList() { //å…¨éƒ¨å†™æˆå°å†™
	return {
		a: ["attr-imgSrc", "attr-name", "attr-package", "attr-packageSkuCode", "attr-packageskuCode", "attr-prdId", "class", "commentId",
			"data-addr", "data-code", "data-field", "data-gidx", "data-id", "data-idx", "data-lv", "data-main", "data-ordercode",
			"data-pid", "data-time", "data-value", "data_type", "defaultGiftKey", "href", "id", "interest-info", "interest-price",
			"interest-skuid", "isHis", "key", "level-value", "num", "onclick", "onmouseover", "ordercode", "orderinfo", "pagenum",
			"productId", "rel", "releated-ordercode", "sku-id", "skucode", "style", "sysTagId", "target", "title", "totalPage", "type",
			"viewtype", "dis-flag", "typePage", "validatetype", "data-specfield", "extratype", "data-skuCodes", "mediaPath", "data-packageStatus",
			"data-needUpload", "data-type", "data-reson", "dis-flag", "innerHTML", "defaultgiftkey", "pid", "commentid", "replyid", "pagenum", "totalpage", "systagid"
		],
		abbr: ["title"],
		b: ["class", "id", "data-oldval"],
		bdi: ["dir"],
		bdo: ["dir"],
		big: [],
		blockquote: ["cite"],
		br: [],
		caption: [],
		center: [],
		cite: [],
		code: [],
		col: ["align", "valign", "span", "width"],
		colgroup: ["align", "valign", "span", "width"],
		dd: ["cityId", "class", "data-value", "districtId", "id", "level-value", "provinceId", "title"],
		del: ["datetime"],
		details: ["open"],
		div: ["data-len", "data-pidx", "data-gadgetid", "onclick", "data-gidx", "data-shopcode", "data-price", "data-sku", "title",
			"data-scode", "replyCount", "style", "id", "class", "skuid", "data-floor", "data-group", "data-actid",
			"data-itemId", "data-addressid", "interest-allow", "interest-button", "replycount"
		],
		dl: ["id", "class"],
		dt: ["class", "id"],
		em: ["id", "class", "style", "data-num", "data-his"],
		font: ["color", "size", "face"],
		footer: [],
		h1: ["id"],
		h2: ["class", "id", "style"],
		h3: ["class", "style"],
		h4: [],
		h5: [],
		h6: [],
		header: [],
		hr: [],
		i: ["class", "id", "name", "onclick", "style", "type", "value"],
		img: ["alt", "bigPic", "class", "giftskuId", "height", "id", "image-large", "name", "onerror", "src", "title", "width",
			"data-lazy-src", "onclick", "imgpath", "bigpic", "style"
		],
		ins: ["datetime"],
		input: ["autocomplete", "checked", "chosegiftkey", "class", "clearorder", "data-actId", "data-actid", "data-address",
			"data-attrid", "data-city", "data-code", "data-consignee", "data-district", "data-dpcode", "data-group", "data-id",
			"data-itemId", "data-mainCode", "data-mobile", "data-nullable", "data-price", "data-province", "data-scode", "data-street",
			"data-type", "defaultgiftKey", "disabled", "file_index", "file_size", "id", "itemtype", "maxlength", "name", "onblur",
			"onchange", "onclick", "paymentstatus", "placeholder", "readonly", "skucode", "style", "type", "validateType", "value",
			"min", "max", "data-weight", "data-totalprice", "discount", "data-skulist-rushbuy", "data-largerProductLabel",
			"data-producttype", "data-skucode", "chosegiftkey", "defaultgiftkey", "onfocus", "onkeyup", "oninput"
		],
		li: ["attr-packageskucode", "class", "data", "data-attrcode", "data-attrid", "data-attrname", "data-code",
			"data-idx", "data-pid", "data-productid", "data-scode", "data-sidx", "data-skuId", "data-skuid", "data-sname",
			"data-tgidx", "data-type", "data-val", "id", "index", "name", "onclick", "shopcode-info", "shopcode-info", "style",
			"tag-s", "title", "taskCode", "index", "code", "data", "data-skulist-rushbuy", "data-reasondes", "data-UploadDes", "data-packageStatus",
			"data-isShowPriceProtect", "data-value", "data-packageStatus", "data-num", "data-min", "data-max", "addrtype"
		],
		mark: [],
		nav: ["class"],
		ol: ["class", "data-sku", "id"],
		p: ["class", "data-attrid", "data-id", "data-name", "id", "onclick", "pid", "style", "title"],
		pre: [],
		s: ["id", "style", "class", "pid"],
		section: [],
		small: [],
		span: ["attr-package", "class", "data-price", "data-score", "data-tips", "href", "id", "onclick", "pic_index",
			"skucode", "style", "data-day", "data-id", "title", "pic-index"
		],
		sub: [],
		sup: [],
		strong: ["id", "style", "class"],
		table: ["id", "class", "name", "style", "width", "border", "align", "valign", "cellpadding", "cellspacing"],
		tbody: ["align", "valign", "id"],
		td: ["id", "class", "width", "rowspan", "colspan", "align", "valign", "addrType"],
		textarea: ["id", "name", "class", "title", "style", "onclick", "readonly", "maxlength", "placeholder", "onkeyup"],
		tfoot: ["align", "valign"],
		th: ["id", "class", "width", "rowspan", "colspan", "align", "valign"],
		thead: ["align", "valign"],
		tr: ["id", "class", "rowspan", "align", "valign"],
		tt: [],
		u: [],
		ul: ["class", "data-attrname", "data-choose", "data-gid", "data-lv", "data-size", "data-specfield", "id", "num", "style", "data-edays", "data-ldays"],
		video: ["autoplay", "controls", "loop", "preload", "src", "height", "width"],
		canvas: ["class", "width", "height", "style", "id"],
		label: ["id", "class", "width", "height", "style", "for"],
		iframe: ["class", "frameborder", "height", "id", "name", "scrolling", "src", "width"],
		form: ["action", "autocomplete", "enctype", "id", "method", "onsubmit"],
		select: ["class", "data-attrid", "disabled", "id", "name", "data-prov", "data-city", "data-star", "skuid", "data-scode", "data-skuId", "provinceId", "cityId", "districtId", "addrType"],
		option: ["selected", "value"]
	};
}

function getStyleWhiteList() {
	// true/false
	// Function: function (val) { return true/false}
	var whiteList = {};
	whiteList['align-content'] = false;
	whiteList['align-items'] = false;
	whiteList['align-self'] = false;
	whiteList['all'] = false;
	whiteList['anchor-point'] = false;
	whiteList['animation'] = false;
	whiteList['animation-delay'] = false;
	whiteList['animation-direction'] = false;
	whiteList['animation-duration'] = false;
	whiteList['animation-fill-mode'] = false;
	whiteList['animation-iteration-count'] = false;
	whiteList['animation-name'] = false;
	whiteList['azimuth'] = false;
	whiteList['backface-visibility'] = false;
	whiteList['background'] = true;
	whiteList['background-attachment'] = true;
	whiteList['background-clip'] = true;
	whiteList['background-color'] = true;
	whiteList['background-image'] = backgroundimageChecker;
	whiteList['background-origin'] = true;
	whiteList['background-position'] = true;
	whiteList['background-repeat'] = true;
	whiteList['background-size'] = true;
	whiteList['baseline-shift'] = false;
	whiteList['binding'] = false;
	whiteList['bleed'] = false;
	whiteList['border'] = true;
	whiteList['border-bottom'] = true;
	whiteList['border-bottom-color'] = true;
	whiteList['border-bottom-left-radius'] = true;
	whiteList['border-bottom-right-radius'] = true;
	whiteList['border-bottom-style'] = true;
	whiteList['border-bottom-width'] = true;
	whiteList['border-collapse'] = true;
	whiteList['border-color'] = true;
	whiteList['border-image'] = false;
	whiteList['border-image-outset'] = true;
	whiteList['border-image-repeat'] = true;
	whiteList['border-image-slice'] = true;
	whiteList['border-image-source'] = true;
	whiteList['border-image-width'] = true;
	whiteList['border-left'] = true;
	whiteList['border-left-color'] = true;
	whiteList['border-left-style'] = true;
	whiteList['border-left-width'] = true;
	whiteList['border-radius'] = true;
	whiteList['border-right'] = true;
	whiteList['border-right-color'] = true;
	whiteList['border-right-style'] = true;
	whiteList['border-right-width'] = true;
	whiteList['border-spacing'] = true;
	whiteList['border-style'] = true;
	whiteList['border-top'] = true;
	whiteList['border-top-color'] = true;
	whiteList['border-top-left-radius'] = true;
	whiteList['border-top-right-radius'] = true;
	whiteList['border-top-style'] = true;
	whiteList['border-top-width'] = true;
	whiteList['border-width'] = true;
	whiteList['bottom'] = false;
	whiteList['box-decoration-break'] = true;
	whiteList['box-shadow'] = true;
	whiteList['box-sizing'] = true;
	whiteList['box-snap'] = true;
	whiteList['box-suppress'] = true;
	whiteList['break-after'] = true;
	whiteList['break-before'] = true;
	whiteList['break-inside'] = true;
	whiteList['caption-side'] = false;
	whiteList['chains'] = false;
	whiteList['clear'] = true;
	whiteList['clip'] = false;
	whiteList['clip-path'] = false;
	whiteList['clip-rule'] = false;
	whiteList['color'] = true;
	whiteList['color-interpolation-filters'] = true;
	whiteList['column-count'] = false;
	whiteList['column-fill'] = false;
	whiteList['column-gap'] = false;
	whiteList['column-rule'] = false;
	whiteList['column-rule-color'] = false;
	whiteList['column-rule-style'] = false;
	whiteList['column-rule-width'] = false;
	whiteList['column-span'] = false;
	whiteList['column-width'] = false;
	whiteList['columns'] = false;
	whiteList['contain'] = false;
	whiteList['content'] = false;
	whiteList['counter-increment'] = false;
	whiteList['counter-reset'] = false;
	whiteList['counter-set'] = false;
	whiteList['crop'] = false;
	whiteList['cue'] = false;
	whiteList['cue-after'] = false;
	whiteList['cue-before'] = false;
	whiteList['cursor'] = false;
	whiteList['direction'] = false;
	whiteList['display'] = true;
	whiteList['display-inside'] = true;
	whiteList['display-list'] = true;
	whiteList['display-outside'] = true;
	whiteList['dominant-baseline'] = false;
	whiteList['elevation'] = false;
	whiteList['empty-cells'] = false;
	whiteList['filter'] = false;
	whiteList['flex'] = false;
	whiteList['flex-basis'] = false;
	whiteList['flex-direction'] = false;
	whiteList['flex-flow'] = false;
	whiteList['flex-grow'] = false;
	whiteList['flex-shrink'] = false;
	whiteList['flex-wrap'] = false;
	whiteList['float'] = false;
	whiteList['float-offset'] = false;
	whiteList['flood-color'] = false;
	whiteList['flood-opacity'] = false;
	whiteList['flow-from'] = false;
	whiteList['flow-into'] = false;
	whiteList['font'] = true;
	whiteList['font-family'] = true;
	whiteList['font-feature-settings'] = true;
	whiteList['font-kerning'] = true;
	whiteList['font-language-override'] = true;
	whiteList['font-size'] = true;
	whiteList['font-size-adjust'] = true;
	whiteList['font-stretch'] = true;
	whiteList['font-style'] = true;
	whiteList['font-synthesis'] = true;
	whiteList['font-variant'] = true;
	whiteList['font-variant-alternates'] = true;
	whiteList['font-variant-caps'] = true;
	whiteList['font-variant-east-asian'] = true;
	whiteList['font-variant-ligatures'] = true;
	whiteList['font-variant-numeric'] = true;
	whiteList['font-variant-position'] = true;
	whiteList['font-weight'] = true;
	whiteList['grid'] = false;
	whiteList['grid-area'] = false;
	whiteList['grid-auto-columns'] = false;
	whiteList['grid-auto-flow'] = false;
	whiteList['grid-auto-rows'] = false;
	whiteList['grid-column'] = false;
	whiteList['grid-column-end'] = false;
	whiteList['grid-column-start'] = false;
	whiteList['grid-row'] = false;
	whiteList['grid-row-end'] = false;
	whiteList['grid-row-start'] = false;
	whiteList['grid-template'] = false;
	whiteList['grid-template-areas'] = false;
	whiteList['grid-template-columns'] = false;
	whiteList['grid-template-rows'] = false;
	whiteList['hanging-punctuation'] = false;
	whiteList['height'] = true;
	whiteList['hyphens'] = false;
	whiteList['icon'] = false;
	whiteList['image-orientation'] = false;
	whiteList['image-resolution'] = false;
	whiteList['ime-mode'] = false;
	whiteList['initial-letters'] = false;
	whiteList['inline-box-align'] = false;
	whiteList['justify-content'] = false;
	whiteList['justify-items'] = false;
	whiteList['justify-self'] = false;
	whiteList['left'] = false;
	whiteList['letter-spacing'] = true;
	whiteList['lighting-color'] = true;
	whiteList['line-box-contain'] = false;
	whiteList['line-break'] = false;
	whiteList['line-grid'] = false;
	whiteList['line-height'] = false;
	whiteList['line-snap'] = false;
	whiteList['line-stacking'] = false;
	whiteList['line-stacking-ruby'] = false;
	whiteList['line-stacking-shift'] = false;
	whiteList['line-stacking-strategy'] = false;
	whiteList['list-style'] = true;
	whiteList['list-style-image'] = true;
	whiteList['list-style-position'] = true;
	whiteList['list-style-type'] = true;
	whiteList['margin'] = true;
	whiteList['margin-bottom'] = true;
	whiteList['margin-left'] = true;
	whiteList['margin-right'] = true;
	whiteList['margin-top'] = true;
	whiteList['marker-offset'] = false;
	whiteList['marker-side'] = false;
	whiteList['marks'] = false;
	whiteList['mask'] = false;
	whiteList['mask-box'] = false;
	whiteList['mask-box-outset'] = false;
	whiteList['mask-box-repeat'] = false;
	whiteList['mask-box-slice'] = false;
	whiteList['mask-box-source'] = false;
	whiteList['mask-box-width'] = false;
	whiteList['mask-clip'] = false;
	whiteList['mask-image'] = false;
	whiteList['mask-origin'] = false;
	whiteList['mask-position'] = false;
	whiteList['mask-repeat'] = false;
	whiteList['mask-size'] = false;
	whiteList['mask-source-type'] = false;
	whiteList['mask-type'] = false;
	whiteList['max-height'] = true;
	whiteList['max-lines'] = false;
	whiteList['max-width'] = true;
	whiteList['min-height'] = true;
	whiteList['min-width'] = true;
	whiteList['move-to'] = false;
	whiteList['nav-down'] = false;
	whiteList['nav-index'] = false;
	whiteList['nav-left'] = false;
	whiteList['nav-right'] = false;
	whiteList['nav-up'] = false;
	whiteList['object-fit'] = false;
	whiteList['object-position'] = false;
	whiteList['opacity'] = false;
	whiteList['order'] = false;
	whiteList['orphans'] = false;
	whiteList['outline'] = false;
	whiteList['outline-color'] = false;
	whiteList['outline-offset'] = false;
	whiteList['outline-style'] = false;
	whiteList['outline-width'] = false;
	whiteList['overflow'] = false;
	whiteList['overflow-wrap'] = false;
	whiteList['overflow-x'] = false;
	whiteList['overflow-y'] = false;
	whiteList['padding'] = true;
	whiteList['padding-bottom'] = true;
	whiteList['padding-left'] = true;
	whiteList['padding-right'] = true;
	whiteList['padding-top'] = true;
	whiteList['page'] = false;
	whiteList['page-break-after'] = false;
	whiteList['page-break-before'] = false;
	whiteList['page-break-inside'] = false;
	whiteList['page-policy'] = false;
	whiteList['pause'] = false;
	whiteList['pause-after'] = false;
	whiteList['pause-before'] = false;
	whiteList['perspective'] = false;
	whiteList['perspective-origin'] = false;
	whiteList['pitch'] = false;
	whiteList['pitch-range'] = false;
	whiteList['play-during'] = false;
	whiteList['position'] = positionChecker;
	whiteList['presentation-level'] = false;
	whiteList['quotes'] = false;
	whiteList['region-fragment'] = false;
	whiteList['resize'] = false;
	whiteList['rest'] = false;
	whiteList['rest-after'] = false;
	whiteList['rest-before'] = false;
	whiteList['richness'] = false;
	whiteList['right'] = false;
	whiteList['rotation'] = false;
	whiteList['rotation-point'] = false;
	whiteList['ruby-align'] = false;
	whiteList['ruby-merge'] = false;
	whiteList['ruby-position'] = false;
	whiteList['shape-image-threshold'] = false;
	whiteList['shape-outside'] = false;
	whiteList['shape-margin'] = false;
	whiteList['size'] = false;
	whiteList['speak'] = false;
	whiteList['speak-as'] = false;
	whiteList['speak-header'] = false;
	whiteList['speak-numeral'] = false;
	whiteList['speak-punctuation'] = false;
	whiteList['speech-rate'] = false;
	whiteList['stress'] = false;
	whiteList['string-set'] = false;
	whiteList['tab-size'] = false;
	whiteList['table-layout'] = false;
	whiteList['text-align'] = true;
	whiteList['text-align-last'] = true;
	whiteList['text-combine-upright'] = true;
	whiteList['text-decoration'] = true;
	whiteList['text-decoration-color'] = true;
	whiteList['text-decoration-line'] = true;
	whiteList['text-decoration-skip'] = true;
	whiteList['text-decoration-style'] = true;
	whiteList['text-emphasis'] = true;
	whiteList['text-emphasis-color'] = true;
	whiteList['text-emphasis-position'] = true;
	whiteList['text-emphasis-style'] = true;
	whiteList['text-height'] = true;
	whiteList['text-indent'] = true;
	whiteList['text-justify'] = true;
	whiteList['text-orientation'] = true;
	whiteList['text-overflow'] = true;
	whiteList['text-shadow'] = true;
	whiteList['text-space-collapse'] = true;
	whiteList['text-transform'] = true;
	whiteList['text-underline-position'] = true;
	whiteList['text-wrap'] = true;
	whiteList['top'] = false;
	whiteList['transform'] = false;
	whiteList['transform-origin'] = false;
	whiteList['transform-style'] = false;
	whiteList['transition'] = false;
	whiteList['transition-delay'] = false;
	whiteList['transition-duration'] = false;
	whiteList['transition-property'] = false;
	whiteList['transition-timing-function'] = false;
	whiteList['unicode-bidi'] = false;
	whiteList['vertical-align'] = false;
	whiteList['visibility'] = false;
	whiteList['voice-balance'] = false;
	whiteList['voice-duration'] = false;
	whiteList['voice-family'] = false;
	whiteList['voice-pitch'] = false;
	whiteList['voice-range'] = false;
	whiteList['voice-rate'] = false;
	whiteList['voice-stress'] = false;
	whiteList['voice-volume'] = false;
	whiteList['volume'] = false;
	whiteList['white-space'] = false;
	whiteList['widows'] = false;
	whiteList['width'] = true;
	whiteList['will-change'] = false;
	whiteList['word-break'] = true;
	whiteList['word-spacing'] = true;
	whiteList['word-wrap'] = true;
	whiteList['wrap-flow'] = false;
	whiteList['wrap-through'] = false;
	whiteList['writing-mode'] = false;
	whiteList['z-index'] = false;

	return whiteList;
}
var positionChecker = function(val) {
	if(val === "relative" || val === "absolute" || val === "static")
		return true;
	else
		return false;
};
var backgroundimageChecker = function(val) {
	if(val === "none" || val === "url(about:blank)")
		return true;
	else return false;
};

var REGEXP_ONCLICK = /^[a-zA-Z0-9\._]{1,50}\(('|"){0,1}.{0,500}('|"){0,1}(,('|"){0,1}.{0,500}('|"){0,1}){0,10}\);{0,1}$/; //onclickï¼Œæ‹¬å·å‰é¢å…è®¸æ•°å­—ã€å­—æ¯ã€ä¸‹åˆ’çº¿ã€ç‚¹å·ï¼Œæ‹¬å·åŽé¢å…è®¸åˆ†å·ï¼Œæ‹¬å·ä¸­é—´ä»»æ„å­—ç¬¦ï¼Œå•ç‹¬ç¼–ç 
var REGEXP_WORD_NUMBER = /^[a-zA-Z0-9]{1,100}$/; //æ•°å­—å­—æ¯
var REGEXP_EMAIL = /^[\w\-]+(?:\.{0,1}[\w\-]+)*@[\w\-]+(?:[\-\.][\w]+)*\.[a-zA-Z]+$/; //é‚®ç®±
var REGEXP_PHONE = /^[\d\+\-]{5,30}$/; //ç”µè¯å·ç 
var REGEXP_EXPRESSION_ON_TAG_ATTR = /e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi;
var REGEXP_IMAGE_ATTR = /^(http(s?):\/\/)?[a-z0-9A-Z_\./\-]{5,250}\.(jpg|jpeg|png|bmp|gif|svg|JPG|JPEG|PNG|BMP|GIF|SVG|webp)$/;
var REGEXP_HREF_ATTR = /^http(s?):\/\/[\-a-zA-Z0-9:\.]{1,100}(\/[\-\w/\.#:]{0,100})?(\?[\-\w#/&amp;=\|\.,;:]{0,1000})?$/;
var REGEXP_HREF_ON_DOMAIN_ATTR = /^\/?[\-\w#]{1,100}(\/{1,2}[\-\w#]{1,100}){0,20}(\.[\-\w#]{1,30})?\/?(\?{1,2}[\u4e00-\u9fa5\s\%\-\w\+#/&amp;=\|\.,;:]{0,300})?$/;
var REGEXP_ATTR_NAME = /^[a-zA-Z0-9\-\_]{1,50}$/;

function printLog(input) {
	console.log(input);
}